可变类型
1.可变类型引用在原地址加上一个标签
2.对不可变类型,内存地址只有一个,浅拷贝、深拷贝都等于赋值操作,指想同一个地址
print('可变类型赋值就是原对象地址的引用')
l=['1',1,2,[1,2,3]]
l1=l # 可变类型引用在原内存地址加上一个标签
l1.append(4)
print(l,l1,id(l),id(l1)) # 一个引用改变其他引用也改变
print('不可变类型')
s='212'
s1=s
s1=s+'2'
print(s,s1,id(s),id(s1))
import copy
s2=copy.deepcopy(s)
print(id(s),id(s2)) # 对不可变类型,内存地址只有一个,浅拷贝和深拷贝都只是想等于赋值操作,
深拷贝把列表中包含的可变类型都拷贝到新的内存地址,浅拷贝只是把列表拷贝到新的内存地址,列表中的可变类型还是原来的内存地址
import copy
list1=['1',1,2,[1,2,3]]
dlist=copy.deepcopy(list1)
dlist[3].append(4)
print('深拷贝list1和dlist地址不一样:',id(list1),id(dlist))
print('深拷贝list1和dlist中的可变类型地址改变:')
print(id(list1[3]),id(dlist[3]),list1[3],dlist[3])
print()
clist=copy.copy(list1)
clist[3].append(4)
print('浅拷贝list1和clist地址不一样:',id(list1),id(clist))
print('浅拷贝list1和clist中的可变类型地址不改变:')
print(id(list1[3]),id(clist[3]),list1[3],clist[3])
执行结果: