python的可变与不可变数据类型

背景:

    探寻python的数据类型是否可变,也可以更好的理解python对内存的使用情况。

可变与不可变定义

        可变数据类型:在python中定义一个变量,当变量值被修改后,内存地址未变更(对象未变更),则将该数据定义为可变数据类型。

可不变数据类型:当变量数值被修改后,变量的内存地址发生变更(创建了新对象),则认为是不可变数据类型。

  针对python数据类型进行测试:

  数字:

>>> a = 111
>>> id(a)
1549733776
>>> a = 222
>>> id(a)
1549737328

  结论:数字类型的变量值变更后内存地址发生改变  

  字符串:

>>> a = "abcdefg"
>>> id(a)
2363386268560
>>> a = "abcdefgggggg"
>>> id(a)
2363386295024

  结论:字符串类型的变量值变更后内存地址发生改变

  元组:

>>> a = (‘aa‘,‘bb‘,‘cc‘)
>>> id(a)
2363384788456
>>> a = (‘aa‘,‘bb‘,‘dd‘)
>>> id(a)
2363384789896

  结论:元组类型的变量值改变后内存地址发生变化

  列表:

>>> a = [‘aa‘,‘bb‘,‘cc‘]
>>> id(a)
2363386243016
>>> a[0] = 11
>>> a
[11, ‘bb‘, ‘cc‘]
>>> id(a)
2363386243016

  结论:列表类型的变量值发生变化后内存地址未变更

  字典

>>> a = {‘name‘:‘zhangsan‘,‘age‘:‘33‘}
>>> id(a)
2363384325384
>>> a[‘name‘] = ‘lisi‘
>>> a
{‘name‘: ‘lisi‘, ‘age‘: ‘33‘}
>>> id(a)
2363384325384

  结论:字典类型的变量值发生变化后内存地址未变更

  汇总:当变量值为数字,字符串,元组数据类型时,数值发生变化后内存地址变更,以为着创建了一个新对象。因此不可变数据类型为:数字,字符串,元组。

     当变量值为列表,字典数据类型时,数值发生变化后内存地址未变更,以为着变更后依然是在同一个对象,因此可变数据类型为:列表,字典。

  

原文地址:https://www.cnblogs.com/yujiashuo/p/9158985.html

时间: 2024-11-07 07:17:22

python的可变与不可变数据类型的相关文章

python可变和不可变类型

时长总结一下Python基础知识,动手写一写不容易忘记 * Python的数据类型可以分为可变与不可变类型两大类 可变类型:列表 ,字典 不可变类型:数值,字符,元组 * 对不可变类型进行赋值的时候其实是创建了一个新的不可变对象,并将指向原来不可变对象的变量指向这个新的不可变对象,这个时候原来的不可变对象就失去了指向它的变量 ,如果没有新的变量指向它的话,这个不可变对象就会被回收 eg: 1 i=1 2 i+=1 3 i 4 2 实际上此处的i+=1并不是真的在原来的int对象上进行加1,而是重

可变与不可变数据类型详解

在学习python过程中我们一定会遇到不可变数据类型和可变数据类型. 1.名词解释 以下所有的内容都是基于内存地址来说的. 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型. 可变数据类型    :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型.    总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变 2.数据类型分类 在python中数据

python 深拷贝和浅拷贝之可变和不可变对象总结

了解深拷贝和浅拷贝之前先要理解可变与不可变对象 python只允许使用引用传递,有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple Python int,string,float,tuple不可变举栗子: def int_object(): i = 89 j = 89 print(id(89)) print('i id:' + str(id(i))) print('j id:' + str(id(j))) print(i is j)

python中的可变与不可变对象

Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可变对象,该对象所指向的内存中的值可以被改变.变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变. Python中,数值类型(int和float).字符串str.元组tuple都是不可变类

Python学习(七)——可变与不可变参数

下面一段代码演示了可变与不可变默认参数的区别,通过查看内存地址以及每次函数调用之后的默认参数的变化,可以看出两段代码为什么会产生不同的结果. # -*- coding: cp936 -*-  # 上面一句是为了中文编码问题 # 默认值只被赋值一次.这使得当默认值是可变对象时会有所不同,比如列表.字典或者大多数类的实例. # 例如,下面的函数在后续调用过程中会累积(前面)传给它的参数 def f(a,L=[]): print('默认参数地址为:'+str(id(L))) L.append(a) p

Python中的可变、不可变对象和赋值技巧序列解包

可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immutable)两种类型,元组(tuple).数值型(number).字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象. 不可变对象 见一个例子,分析不可变对象的特点 python内置id()函数,用于返回对象的唯一标识(identity).id()

Python初学____探究_____(1)可变对象 不可变对象理解

1.  可变对象 & 不可变对象 ①对于Python来说,变量=对象 的含义表示着 将该变量作为一个引用绑定到该对象上,当绑定完成后 即可通过变量名使用该对象. 一个对象不存在任何对象引用的时候,就进入了垃圾收集的过程(自动回收机制). ②对于多元素的数据结构,如list,tuple,dict,其实现是通过指针数组来绑定到目标对象. 1.1可变对象 在Python中的可变对象往往是多元素的数据结构,其大部分都是通过指针数组去绑定到元素对象的,多元素可变对象中的可变,是指这个指针数组是可变的(指针

python —— 可变与不可变类型

可变与不可变类型对象 可变和不可变,本质上就是改变了里面的数据后,内存地址是否有改变 可变类型.不可hash 不可变类型,可hash 列表 字符串 字典 数字 集合 元组   不可变的集合 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可变对象,该对象所指向的内存中的值可以被改变.变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并

Python元组tuple(不可变)

Python元组Tuple(不可变): 元组的特点: 1.元组的初始化: tuple = (1, )  #元组只有一个元素的话,初始化时要加,否则当做元素的普通变量类型处理 tuple = (1, 2, 3, [2,4,5])  #可以使不同类型的元素 2.元组中的元素不能被修改: tuple[2] = 5   #错误的,编译不通过,会报错 3.用1中的tuple,只不能改变[2,4,5]列表元素的地址,但可以通过读取其地址改变其列表中的值. 一.元组的运算: 1.元组的组合: tuple3 =