拷贝
可变
可 变:值变id不变
不可变:值变id也变
age=18
print(id(age))
age=19
print(id(age))#不可变
140735591015752
140735591015784
拷贝
如果r2是r1的拷贝对象,则r1内部任何数据类型的元素变化,r2内部的元素也会跟着改变,因为可变类型值变id不变.
r1=['a','b']
r2=r1
r1.append('7')
print(r1)
print(r2)
['a', 'b', '7']
['a', 'b', '7']
浅拷贝
如果r2是r1的浅拷贝对象,r1内部的不可变元素发生了改变,r2不变,如果r1内的可变元素发生了改变,则r2会跟着改变.
import copy
r1=['1','2','3',['a','b']]
r2=copy.copy(r1)
r1.append('9')
print(r1)
print(r2)
['1', '2', '3', ['a', 'b'], '9']
['1', '2', '3', ['a', 'b']]
r1[3].append('m')
print(r1)
print(r2)#列表为可变元素
['1', '2', '3', ['a', 'b', 'm'], '9']
['1', '2', '3', ['a', 'b', 'm']]
深拷贝
如果r2是r1的深拷贝对象,r1内的元素发生了变化,r2都不会改变
import copy
l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)
l1.append('g')
print(l1)
print(l2)
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]
l1[3].append('g')
print(l1)
print(l2)
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
['a', 'b', 'c', ['d', 'e', 'f']]