首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元组上copy.copy与copy.deepcopy性能的比较

元组上copy.copy与copy.deepcopy性能的比较
EN

Stack Overflow用户
提问于 2012-04-23 03:07:01
回答 1查看 5.3K关注 0票数 5
代码语言:javascript
复制
%python -m timeit -s "import copy" "x = (1, 2, 3)" "copy.deepcopy(x)"
100000 loops, best of 3: 10.1 usec per loop

%python -m timeit -s "import copy" "x = (1, 2, 3)" "copy.copy(x)"
1000000 loops, best of 3: 0.609 usec per loop

为什么deepcopycopy慢15倍?

每个函数都必须遍历元组的元素。在迭代过程中,copy创建对每个元素的另一个引用;deepcopy深度复制每个元素。

但是每个元素都是一个int,深度复制一个int只会创建对它的另一个引用。换句话说,这两个函数似乎执行完全相同的步骤,相同的次数。

以下是验证过程中没有创建新实例的验证:

代码语言:javascript
复制
ActivePython 3.2.1.2 (ActiveState Software Inc.) based on
Python 3.2.1 (default, Jul 18 2011, 14:31:09) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x = (1,2,3)
>>> import copy
>>> y = copy.copy(x)
>>> z = copy.deepcopy(x)
>>> x is y
True
>>> x is z
True
>>> x[1] is z[1]
True
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-23 03:12:21

元组是不可变的,但它们可以包含可变元素:

代码语言:javascript
复制
>>> a = (1, 2, [])
>>> a[2].append(1000)
>>> a
(1, 2, [1000])

注意,元组没有改变:它是列表;元组仍然包含完全相同的列表。

deepcopy应该递归地复制那些可变元素。copy只是复制对它们的引用。

代码语言:javascript
复制
>>> from copy import copy, deepcopy

>>> a = (1, 2, [])
>>> c = copy(a)
>>> d = deepcopy(a)

>>> a[2].append(1000)

>>> c
(1, 2, [1000])
>>> d
(1, 2, [])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10271132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档