gpt4 book ai didi

python - 在 Python 中,deepcopy 和 [each[ :] for each in List] 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:17 24 4
gpt4 key购买 nike

示例代码如下:

from copy import deepcopy
List = [range(3), range(3), range(3)]
a = deepcopy(List)
b = [each[:] for each in List]

我知道初始化 a 所需的时间比 b 的时间慢,但为什么会这样呢? deepcopy 和 [each[:] for each in List] 有什么区别?为什么 deepcopy 这么慢?

最佳答案

each[:] 创建每个嵌套列表的 副本。 copy.deepcopy() 将进行深度复制。

在这种特定情况下,您的嵌套列表包含不可变整数,这种差异实际上并不重要; deepcopy() 复制时返回整数不变。但是,如果嵌套列表中有可变对象,则 deepcopy() 将继续创建这些对象的副本,而您的列表理解不会。

例如,在复制包含带有字典的列表的列表时,您会看到不同之处:

>>> from copy import deepcopy
>>> sample = [[{'foo': 'bar'}, {'ham': 'spam'}], [{'monty': 'python'}, {'eric': 'idle'}]]
>>> shallow = [each[:] for each in sample]
>>> deep = deepcopy(sample)
>>> sample[-1][-1]['john'] = 'cleese'
>>> sample
[[{'foo': 'bar'}, {'ham': 'spam'}], [{'monty': 'python'}, {'eric': 'idle', 'john': 'cleese'}]]
>>> shallow
[[{'foo': 'bar'}, {'ham': 'spam'}], [{'monty': 'python'}, {'eric': 'idle', 'john': 'cleese'}]]
>>> deep
[[{'foo': 'bar'}, {'ham': 'spam'}], [{'monty': 'python'}, {'eric': 'idle'}]]

因为deepcopy()操作必须测试嵌套列表中的每个元素,所以它也比较慢;如果您知道不需要生成“更深层次”的副本,则列表理解是更好的选择。

关于python - 在 Python 中,deepcopy 和 [each[ :] for each in List] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com