浅拷贝:
# 浅拷贝(仅拷贝指向的地址)
a = [1, 2, 3]
b = a
print("a id:", id(a))
print("b id:", id(b))
a.append(4)
print("b is:", b)
输出:
浅拷贝可以理解为仅拷贝指向内存的地址,a指向【1,2,3】,b也是指向【1,2,3】,变量b并不在内存中单独开辟空间
深拷贝:
# 深拷贝(拷贝其指向内存的值)
import copy
x = [1, 2, 3]
y = copy.deepcopy(x)
print("x和y在内存在的位置".center(30, "*"))
print("x id:", id(x))
print("y id:", id(y))
print("验证深拷贝".center(30, "-"))
x.append("four")
print("x:", x)
print("y:", y)
输出:
深拷贝可以通过 copy 模块下的 deepcopy() 方法实现,深拷贝是将其指向的值拷贝出来单独存放在一块内存中,原来指向地址的值改变不影响深拷贝
copy()和deepcopy()的区别:
import copy
"""
copy() 与 deepcopy()的区别
"""
a = [1, 2, 3]
b = ["x", "y", "z"]
c = [a, b]
d = copy.deepcopy(c)
e = copy.copy(c)
print("c的值:", c)
print("d的值:", d)
print("c的值:", c)
print("c id:", id(c))
print("d id:", id(d))
print("e id:", id(e))
print("copy() 与 deepcopy()的区别".center(30, "—"))
a.append(10)
print("c :", c)
print("e :", e)
print("d :", d)
输出:
结论:
copy()方法仅拷贝与其最紧密的一层(这里将c中的内容拷贝)存放在内存中
deepcopy()方法拷贝其最底层的值