参考Equality Python

时间:2015-10-26 13:45:14

标签: list object mutable

我想拥有如下功能。我尝试过很多东西,但仍然无法实现。

>>> a, b = [1], [2]
>>> k = [a, a, b]
>>> k
[[1], [1], [2]]

现在正如预期的那样,如果我更改第二个值,第一个值将自动更改。

>>> k[0][0] = 3
>>> k
[[3], [3], [2]]

您看到如何更改一个值会影响另一个值。

现在我想以某种方式将第三个元素与前两个元素链接起来,这样每当我更改三个元素中的任何一个元素时,它所链接的每个元素都会发生变化。我想要有以下行为:

>>> *Do something to link k[1] or k[0] with k[2]*
>>> k[-1][0] = 4
>>> k
>>> [[4], [4], [4]]

我尝试过以下操作并失败,如下所示:

>>> b = a
>>> k
>>> [[3], [3], [2]]

请帮助我实现上述目标。

我想解决的真正问题: 我正在实施min-cut算法。在这个算法中,我需要在每一步合并两个顶点。我正在尝试通过将两个顶点链接在一起来实现这一点。

1 个答案:

答案 0 :(得分:2)

这是你想要的吗?

a,b = [1],[2]
k = [a,a,b]  # store references to lists a and b
print(k)
k[0][0] = 3  # change the first cell's list's first element
print(k)     # second cell changes as well since it references same list
k[-1] = k[0] # store the first cell's reference in the last cell.  All reference the same list 'a' now.
k[1][0] = 4
print(k)

输出:

[[1], [1], [2]]
[[3], [3], [2]]
[[4], [4], [4]]