我在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]
>>>
为什么会这样?这是有意的吗?我如何阻止它发生?
答案 0 :(得分:1)
执行test_2 = test_1
时,您将test_2指向test_1指向的列表。
你可以改为:
>>> test_2 = test_1.copy()
答案 1 :(得分:1)
这是预期的行为。 Python列表通过引用传递。这意味着当您分配列表时,不是复制列表并将此新列表分配给新变量,而是将两个变量都指向同一个基础列表。这在很多情况下都很有用。但似乎你想要实际复制列表。为此,请执行以下操作:
test_2 = list(test_1)