一、拷贝
就是直接赋值,就是对象引用。
解析:
b= a:赋值引用。a,b都指向同一个对象。
a = [1,[2,3]]
b=a
print(id(a))
print(id(b))
print(id(a[0]))
print(id(b[0]))
print(id(a[1]))
print(id(b[1]))
结果
2614970336128
2614970336128
2614967363888
2614967363888
2614968403968
2614968403968
二、浅拷贝
浅拷贝(copy):拷贝父类,不会拷贝对象的内部的子对象。
a和b是一个独立的对象,但他们的子对象仍指向同一对象(引用)
a = {1:[2,3],4:[5,6]}
b=a.copy()
print(id(a))
print(id(b))
print(id(a[1]))
print(id(b[1]))
a[1].append(9)
print(a)
print(b)
print(id(a[1]))
print(id(b[1]))
结果
2366922650368
2366922650560
2366922704960
2366922704960
{1: [2, 3, 9], 4: [5, 6]}
{1: [2, 3, 9], 4: [5, 6]}
2366922704960
2366922704960
三、深拷贝
深拷贝(deepcopy):copy模块的deepcopy方法,完全拷贝了父对象以及子对象。
b=copy.deepcopy(a):深度拷贝,a和b完全拷贝了父对象及其子对象,两者完全独立。
import copy
a = {1:[2,3],4:[5,6]}
b=copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(a[1]))
print(id(b[1]))
a[1].append(9)
print(a)
print(b)
print(id(a[1]))
print(id(b[1]))
结果
2880923988736
2880928962048
2880923988864
2880928973440
{1: [2, 3, 9], 4: [5, 6]}
{1: [2, 3], 4: [5, 6]}
2880923988864
2880928973440