Python中的深拷贝和浅拷贝
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的深拷贝和浅拷贝相关的知识,希望对你有一定的参考价值。
有一次,在帮师兄做题的时候,调一个bug始终没有调通,后来几经波折,终于有了结果。现在将其中的坑,share出来。其实主要是对python中的深拷贝和浅拷贝理解出现了偏差导致的。
Python中自带了一个copy模块,这个模块用来执行深拷贝和浅拷贝。
浅拷贝:
l1 = [1,2,3,4] l2 = l1 # l2引用l1, 实际都指向同一个对象 print(l2) # [1, 2, 3, 4] l1[0] = 99 # 对l2的操作就是对l1的操作 print(l1) # [99, 2, 3, 4] print(l2) # [99, 2, 3, 4] ###################### from copy import copy l1 = [1, 2, [3, 4]] # 对象中包含对象 l2 = copy(l1) print(l2) # [1, 2, [3, 4]] print(l1) # [1, 2, [3, 4]] l2[2][0] = 99 print(l1) # [1, 2, [99, 4]] print(l2) # [1, 2, [99, 4]] l1[1] = 88 print(l1) # [1, 88, [99, 4]] print(l2) # [1, 2, [99, 4]]
深拷贝:
from copy import deepcopy l1 = [1, 2, 3, 4] l2 = deepcopy(l1) # l2指向l1一样的新对象 print(l2) # [1, 2, 3, 4] l2[0] = 99 # 对l2的操作不会影响到l1 print(l1) # [1, 2, 3, 4] print(l2) # [99, 2, 3, 4]
Python中对list的拷贝:
一:非常奇怪的语法
new_list = old_list[:]
二:内建list()函数
new_list = list(old_list)
三:copy
这个要比list()慢一点,因为它要找到old_list的类型
import copy new_list = copy.copy(old_list)
四:最慢和最消耗内存的方法,但是有时是必须的
import copy new_list = copy.deepcopy(old_list)
以上是关于Python中的深拷贝和浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章