Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我们可以简单地分配集合时,为什么在python中对集合使用内置copy()函数?_Python_Python 2.7 - Fatal编程技术网

当我们可以简单地分配集合时,为什么在python中对集合使用内置copy()函数?

当我们可以简单地分配集合时,为什么在python中对集合使用内置copy()函数?,python,python-2.7,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()函数有什么用处? 为什么我们有一个单独的功能(“复制”)来执行此任务?因为这两个任务做的事情不同: >>> t is s False >>> g is s True t可能等于

下面给出了使用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()函数有什么用处?

为什么我们有一个单独的功能(“复制”)来执行此任务?

因为这两个任务做的事情不同:

>>> 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])
你可能会找到有用的读物。

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


你可以想象这种差异。请注意,
s
g
指向同一个对象,其中as
t
指向这两个对象的浅拷贝。

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


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

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

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