Python列表在分配给其他列表时不会正确更改值

时间:2014-12-14 20:12:17

标签: list python-3.x variable-assignment

我在Python 3代码中遇到错误,经过深入调试后,我发现Python似乎没有正确分配列表:

$ python3
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  5 2014, 20:42:22) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test_1 = [12, 34]
>>> test_1
[12, 34]
>>> test_2 = [12, 34]
>>> test_2
[12, 34]
>>> test_2 = test_1
>>> test_2
[12, 34]
>>> test_1[0] = 'This changes in both arrays!'
>>> test_1
['This changes in both arrays!', 34]
>>> test_2
['This changes in both arrays!', 34]
>>> 

为什么会这样?这是有意的吗?我如何阻止它发生?

2 个答案:

答案 0 :(得分:1)

执行test_2 = test_1时,您将test_2指向test_1指向的列表。

你可以改为:

>>> test_2 = test_1.copy()

答案 1 :(得分:1)

这是预期的行为。 Python列表通过引用传递。这意味着当您分配列表时,不是复制列表并将此新列表分配给新变量,而是将两个变量都指向同一个基础列表。这在很多情况下都很有用。但似乎你想要实际复制列表。为此,请执行以下操作:

test_2 = list(test_1)