Python中的深拷贝和浅拷贝是两种不同的对象复制方式,它们的区别在于是否复制对象内部的子对象。深拷贝会完全复制一个对象及其所有的子对象,创建一个新的独立的对象;浅拷贝只会复制一个对象的引用,不会复制其子对象,如果原对象改变,浅拷贝的对象也会受到影响。为了更好地理解深拷贝和浅拷贝,可以看一些代码示例: # 导入copy模块,它提供了深拷贝和浅拷贝的函数import copy# 定义一个列表a,它包含一个嵌套的列表[3, 4]a = [1, 2, [3, 4]]# 使用赋值操作符=来复制a,得到bb = a# 使用copy.copy函数来浅拷贝a,得到cc = copy.copy(a)# 使用copy.deepcopy函数来深拷贝a,得到dd = copy.deepcopy(a)# 打印a, b, c, d的值和idprint(a, id(a)) # [1, 2, [3, 4]] 140424457381568print(b, id(b)) # [1, 2, [3, 4]] 140424457381568print(c, id(c)) # [1, 2, [3, 4]] 140424457381696print(d, id(d)) # [1, 2, [3, 4]] 140424457381824# 修改a中的第一个元素为0a[0] = 0# 打印a, b, c, d的值和idprint(a, id(a)) # [0, 2, [3, 4]] 140424457381568print(b, id(b)) # [0, 2, [3, 4]] 140424457381568print(c, id(c)) # [1, 2, [3, 4]] 140424457381696print(d, id(d)) # [1, 2, [3, 4]] 140424457381824# 修改a中的嵌套列表中的第一个元素为5a[-1][0] = 5# 打印a, b, c, d的值和idprint(a, id(a)) # [0, 2, [5, 4]] 140424457381568print(b, id(b)) # [0, 2, [5, 4]] 140424457381568print(c, id(c)) # [1, 2, [5, 4]] 140424457381696print(d, id(d)) # [1, 2, [3, 4]] 140424457381824 从上面的代码中,可以看到以下几点:
|
|