使用deepcopy和substring操作的区别

2024-06-02 10:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.7

我有一个清单lst = ['a','b','c']

如果我需要这个列表的副本,我通常会做lst_cpy = lst[:]。在

我在包copy中遇到了一个函数deepcopy,它使我能够实现同样的功能。在

import copy
lst_cpy_2 = copy.deepcopy(lst)

我可以互换使用这两种方法吗?或者两者之间有什么区别吗?在

谢谢。在


Tags: 方法函数import功能列表副本copylst
3条回答

我相信区别在于当你的列表中有一项是列表、dict或其他可变对象时。对于普通副本,对象在副本之间共享:

>>> l = ['a','b',[1,2]]
>>> l2 = l[:]
>>> l2[2].append('c')
>>> l
['a', 'b', [1, 2, 'c']]

但是使用deepcopy(),对象也会被复制:

^{pr2}$

在简单列表的情况下,它们是相同的。如果您的列表中有其他结构,例如,元素是列表或字典,它们将是不同的。在

L[:]生成一个新列表,新列表中的每个元素都是对旧列表中值的新引用。如果其中一个值是可变的,那么对它的更改将显示在新列表中。copy.deepcopy()生成一个新列表,每个元素本身都是旧列表中值的深层副本。所以嵌套的数据结构在每个级别都被复制。在

因为没有方法/需要深度复制字符串,所以对这个特定列表进行切片具有相同的效果。但通常[:]执行序列的浅拷贝。在

相关问题 更多 >