Python列表浅拷贝与深拷贝详解及实现方式
本文详细解析Python中列表的浅拷贝与深拷贝机制。通过对比单层与多维列表的拷贝行为,介绍了for循环、copy()、列表生成式及切片[:]四种浅拷贝方式,并演示了使用copy.deepcopy()进行完全独立复制的方法,帮助开发者避免引用共享导致的意外修改。
对列表执行深拷贝操作时,无论新列表是单层还是多维结构,对其进行的任何修改都不会影响原列表。
相比之下,浅拷贝在处理多维列表时,仅对第一层执行了深拷贝逻辑。由于嵌套的List在复制过程中传递的是内存地址,因此当内层列表元素发生变动时,原列表也会随之改变。
一、浅拷贝(均只对第一层进行深拷贝)
1. for循环依次赋值
old = [1, [1, 2, 3], 3]
new = []
for i in range(len(old)):
new.append(old[i])
new[0] = 3
new[1][0] = 3
print(old)
print(new)
'''
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
'''2. 使用copy()函数
old = [1,[1,2,3],3]
new = old.copy()
new[0] = 3
new[1][0] =3
print(old)
print(new)输出:
[1, [3, 2, 3], 3] [3, [3, 2, 3], 3]
3. 使用列表生成式
old = [1,[1,2,3],3]
new = [i for i in old]
new[0] = 3
new[1][0] = 3
print(old)
print(new)输出:
[1, [3, 2, 3], 3] [3, [3, 2, 3], 3]
4. 使用索引 [:]
old = [1,[1,2,3],3]
new = old[:]
new[0] = 3
new[1][0] = 3
print(old)
print(new)输出:
[1, [3, 2, 3], 3] [3, [3, 2, 3], 3]
对于单层列表而言,浅拷贝的效果等同于深拷贝,例如:
old = [1,2,3]
new = old[:]
new[0] = 666
print(old)
print(new)
"""
[1, 2, 3]
[666, 2, 3]
"""二、深拷贝
使用deepcopy()方法,才能真正复制出一个与原列表完全无关的全新列表:
import copy
old = [1,[1,2,3],3]
new = copy.deepcopy(old)
new[0] = 3
new[1][0] = 3
"""
[1, [1, 2, 3], 3]
[3, [3, 2, 3], 3]
"""
到此这篇关于Python列表的浅拷贝与深拷贝的文章就介绍到这了,更多相关Python浅拷贝与深拷贝内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













