定义:
- 可变序列:列表list , 字典dict ,对象本身进行增删改的操作,而不新建对象,变量还是引用原对象内存地址
- 不可变序列:整型int 浮点型 float 元组 tuple 字符串 string,对象本身进行增删改的操作后,会新建对象,变量会引用新对象的内存地址
1. 不可变序列
print("不可变对象")
x = 1
print(id(x))
y = 1
print(id(y))
x= 2
print(id(x))
y = 2
print(id(y))
z=y
print(id(z))
x+=2
print(id(x))
# 打印结果
不可变对象
2232814141680
2232814141680
2232814141712
2232814141712
2232814141712
2232814141776
下面我们用一个图分析下
- 不可变对象优点:不管内存中有多少个引用,对象实体是由一个,只占用一块内存
- 不可变对象缺点:当需要对变量进行运算,改变变量引用的对象时,会创建新对象,如果频繁的运算,就会频繁的创建新对象
2. 可变序列
print("可变对象")
a = [1,2,3]
print(id(a))
b = [1,2,3]
print(id(b))
a.append(4)
print(id(a))
a+=[2]
print(id(a))
print(a)
a = [1,2,3,4,2]
print(a)
print(id(a))
# 编译打印结果
可变对象
2544116590912
2544116526848
2544116590912
2544116590912
[1, 2, 3, 4, 2]
[1, 2, 3, 4, 2]
2209172023488
可变序列
- 允许对象的内容进行变更(如:a.append() ,a+=[2])即值的变化,但是地址不会变化,变量引用的对象地址不会改变
- 如果类似 a= [1,2,3,4,2] 这样的赋值,内存中会有两个对象,每个对象都有自己的地址,相当于内存中对于同值对象保存了多份。