浏览量 4413
2019/08/20 20:16
python对象复制
结论
等号赋值
赋值后的对象内存地址相同,改变新对象,老对象同步改变。
copy.copy浅赋值
赋值后的对象内存地址不同,但是列表内对象地址相同。 如果修改新列表内的数组对象,老列表同步修改。 如果修改列表内的数值对象,老列表不变。
copy.deepcopy深赋值
赋值后的对象内存地址不同,列表内对象地址也不同。 修改新对象完全不影响老对象。
实验脚本
>>> import copy
>>> a=[1,[1,2],3]
>>> b=a
>>> b
[1, [1, 2], 3]
>>> id(a)
4549388120
>>> id(b)
4549388120
>>> b[0]=3
>>> a
[3, [1, 2], 3]
>>>
>>>
>>> c=copy.copy(a)
>>> id(c)
4549389992
>>> id(a)
4549388120
>>> c[0]=4
>>> a
[3, [1, 2], 3]
>>> c
[4, [1, 2], 3]
>>> c[1].append(3)
>>> a
[3, [1, 2, 3], 3]
>>> c
[4, [1, 2, 3], 3]
>>>
>>> id(a[2])
140345184649736
>>> id(c[2])
140345184649736
>>> id(c[1])
4549388192
>>> id(a[1])
4549388192
>>> d=copy.deepcopy(a)
>>> id(d)
4549389632
>>> id(a)
4549388120
>>> d[1].append(4)
>>> a
[3, [1, 2, 3], 3]
>>> d
[3, [1, 2, 3, 4], 3]
上一篇
搜索
下一篇