- Python的每个对象分为可变和不可变,主要类型中,数字,字符串,元组是不可变类型的, 列表,字典是可变的。
- 对不可类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
核心提示:
可变类型 Vs 不可变类型
可变类型(mutable):列表,字典
不可变类型(unmutable):数字,字符串,元组
重要:
#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
通过以下实例进行分析:
不可变类型:
以int类型为例子:实际上i+=1 并不是真的在原有的int对象上+1,而是重新创建了一个value为3的的int对象,i引用这个新的对象。
i= 2
i+=1
print(i)
#返回结果3
通过id函数查看变量i的内存地址进行验证:
i= 2
i+=1
print(id(i),i)
i+=1
print(id(i),i)
#返回结果如下:
1352386288 3
1352386320 4
可变类型:
# 以list为例子,list在append之后,还是执行同个内存地址id,因为list是可变类型,可以再原处修改
a = [1,2,3]
print(id(a),a)
a.append(4)
print(id(a),a)
#返回结果如下 发现id没有变,这就是可变类型,值发生改变,id不变
35520840 [1, 2, 3]
35520840 [1, 2, 3, 4]