我以两种方式对集合使用普通联合,即x|=set([4,5,6])
和x=x|set([4,5,6])
,为什么它们的行为有所不同?
对于简单的整数变量,其工作方式相同,即无论我使用的是x=x+1
还是x+=1
,结果都是相同的。
x=set([1,2,3])
y=x
x|=set([4,5,6])
x
set([1, 2, 3, 4, 5, 6])
y
set([1, 2, 3, 4, 5, 6])
x=set([1,2,3])
y=x
x=x|set([4,5,6])
x
set([1, 2, 3, 4, 5, 6])
y
set([1, 2, 3]) # why does the value of y remain unchanged.
答案 0 :(得分:4)
您正在创建一个新的set
并在此处将其分配给x
x = x | set([4, 5, 6])
从这里y
开始独立于x
(它们是不同set
的名称)。
就地分配不会创建新集合;它只是修改
中的当前实例x |= set([4, 5, 6])
现在y
仍与set
引用相同的x
。您可以通过打印看到差异
print(id(x))
print(id(y))
作业前后。
可视化pythontutor.com上的差异是有益的。
一切对于可变对象(例如set
)都是有效的。对于不可变对象,就地分配的行为与“常规”分配相同;即对于x
和int
:x += 1
与x = x + 1
相同。