这里我正在使用python中的list来学习可变概念,
In [114]: x=[1,2]
In [115]: y =x
In [116]: id(y)==id(x)
Out[116]: True
从上面x和y共享相同的状态。我在下面发现了两个案例,
1)这里可变的概念起作用,因为它共享相同的状态,
In [123]: y +=[1,3]
In [124]: id(y)==id(x)
Out[124]: True
In [125]: y
Out[125]: [1, 2, 1, 3]
In [126]: x
Out[126]: [1, 2, 1, 3]
2)这里可变概念不起作用,因为它没有共享相同的状态,
In [130]: y =y+[1,3]
In [131]: id(y)==id(x)
Out[131]: False
In [132]: x
Out[132]: [1, 2]
In [133]: y
Out[133]: [1, 2, 1, 3]
为什么可变概念不适用于第二种情况?
y += [1,3]
和y =y+[1,3]
不相等?
答案 0 :(得分:1)
y += [1,3] # Means append to y list [1,3], object stays same
y = y+[1,3] # Means create new list equals y + [1,3] and write link to it in y
答案 1 :(得分:0)
op=
(其中op
可以是+,*, - ,/,...)是“就地”运营商。
所以如果可以,他们修改作业的左侧。
另一方面, X op Y
创建一个新实例并将结果放在那里。
这意味着
y = [1,2]
y += [3,4]
与
相同 y = [1,2]
y.extend([3,4])
,而
y = [1,2]
y = y + [3,4]
与
相同 y = [1,2]
tmp = list(y) # Create copy of y
tmp.extend([3,4])
y = tmp