Hao*_*ian 1 python copy list deep-copy
以下是示例代码:
from copy import deepcopy
List = [range(3), range(3), range(3)]
a = deepcopy(List)
b = [each[:] for each in List]
Run Code Online (Sandbox Code Playgroud)
我知道初始化a所需的时间比b的时间要慢,但为什么会这样呢?深度复制和[列表中的每个[:]之间有什么区别?为什么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'}]]
Run Code Online (Sandbox Code Playgroud)
因为deepcopy()操作必须测试嵌套列表中的每个元素,所以它也会更慢; 如果您知道不需要生成"更深层"的副本,那么列表理解是更好的选择.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |