2024-06-02 10:31:29 发布
网友
我使用的是python2.7
我有一个清单lst = ['a','b','c']
lst = ['a','b','c']
如果我需要这个列表的副本,我通常会做lst_cpy = lst[:]。在
lst_cpy = lst[:]
我在包copy中遇到了一个函数deepcopy,它使我能够实现同样的功能。在
copy
deepcopy
import copy lst_cpy_2 = copy.deepcopy(lst)
我可以互换使用这两种方法吗?或者两者之间有什么区别吗?在
谢谢。在
我相信区别在于当你的列表中有一项是列表、dict或其他可变对象时。对于普通副本,对象在副本之间共享:
>>> l = ['a','b',[1,2]] >>> l2 = l[:] >>> l2[2].append('c') >>> l ['a', 'b', [1, 2, 'c']]
但是使用deepcopy(),对象也会被复制:
deepcopy()
在简单列表的情况下,它们是相同的。如果您的列表中有其他结构,例如,元素是列表或字典,它们将是不同的。在
L[:]生成一个新列表,新列表中的每个元素都是对旧列表中值的新引用。如果其中一个值是可变的,那么对它的更改将显示在新列表中。copy.deepcopy()生成一个新列表,每个元素本身都是旧列表中值的深层副本。所以嵌套的数据结构在每个级别都被复制。在
L[:]
copy.deepcopy()
因为没有方法/需要深度复制字符串,所以对这个特定列表进行切片具有相同的效果。但通常[:]执行序列的浅拷贝。在
[:]
我相信区别在于当你的列表中有一项是列表、dict或其他可变对象时。对于普通副本,对象在副本之间共享:
但是使用
^{pr2}$deepcopy()
,对象也会被复制:在简单列表的情况下,它们是相同的。如果您的列表中有其他结构,例如,元素是列表或字典,它们将是不同的。在
L[:]
生成一个新列表,新列表中的每个元素都是对旧列表中值的新引用。如果其中一个值是可变的,那么对它的更改将显示在新列表中。copy.deepcopy()
生成一个新列表,每个元素本身都是旧列表中值的深层副本。所以嵌套的数据结构在每个级别都被复制。在因为没有方法/需要深度复制字符串,所以对这个特定列表进行切片具有相同的效果。但通常
[:]
执行序列的浅拷贝。在相关问题 更多 >
编程相关推荐