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

Why use Inbuilt copy() function for sets in python when we can simply assign it?

本问题已经有最佳答案,请猛点这里访问。

下面给出了显示使用copy()函数的代码。

1
2
3
4
5
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()函数的用途是什么?为什么我们有一个单独的函数("copy")来完成这个任务?


继续您的示例,修改g:s将更改,但不会更改。

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

因为这两个任务不一样:

1
2
3
4
>>> t is s
False
>>> g is s
True

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

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

你可能会发现这本书很有用。


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

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


来自文档:

Assignment statements in Python do not copy objects, they create bindings between a target and an object.

您可以在这里看到差异。注意,sg指向同一个对象,其中,t指向两个对象的浅副本。