当我们可以简单地分配它时,为什么在python中使用Inbuilt copy()函数?

时间:2014-06-24 22:07:00

标签: python python-2.7

以下是显示使用 copy()功能的代码。

s = set([1, 2, 3, 4, 5])
t = s.copy()
g = s
print s == t  #Output: True
print s == g  #Output: True

当我们可以简单地在g中分配s的值时, copy()函数的用途是什么?
为什么我们有一个单独的功能('复制')来完成这项任务?

4 个答案:

答案 0 :(得分:4)

通过修改g来继续你的例子:s会改变,但是不会。

>>> g.add(4)
>>> g
set([1, 2, 3, 4])
>>> s
set([1, 2, 3, 4])
>>> t
set([1, 2, 3])

答案 1 :(得分:3)

因为这两个作业不是做同样的事情:

>>> t is s
False
>>> g is s
True

t可能等于s,但.copy()已创建单独的对象,而g 是对同一个对象。为什么这种差异是相关的?考虑一下:

>>> g.add(6)
>>> s
set([1, 2, 3, 4, 5, 6])
>>> t
set([1, 2, 3, 4, 5])

您可能会发现this有用的阅读材料。

答案 2 :(得分:2)

From the docs:

  

Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。

您可以看到差异here。请注意sg指向同一个对象,其中t指向两者的浅层副本。

答案 3 :(得分:2)

集合是Python中的可变对象,因此根据您使用它的操作,您可能希望对副本进行操作,以防止传播您所做的任何更改。

如果您确定您正在执行的操作没有副作用,请继续并指定它。在这种情况下,请注意s指向的值的任何更改也会影响t的值,因为它们都指向同一个集合实例(如果您将python变量视为C,则会有所帮助)指针)。