看看下面的代码
testList = ["This", "Is", "A", "Test"]
dummyList = testList
dummyList = dummyList + ["Hello"]
我原以为 testList 的内容会发生变化,因为 dummyList 指的是 testList 并且我们刚刚添加了一个新元素,但这并没有发生。现在看下面的代码。
testList = ["This", "Is", "A", "Test"]
dummyList = testList
dummyList[0] = 'Hello'
在这段代码中,testList 确实发生了变化。为什么更改 dummyList 会更改第二段代码中的 testList 的内容,而不是第一段?
最佳答案
通过使用 =
运算符,您使 testList
指向与 dummyList
相同的内存地址,因此它们本质上是相同的对象.这可以使用 is
来验证:
testList = ["This", "Is", "A", "Test"]
dummyList = testList
>>> testList is dummyList
True
但是当您重新分配它时,它会创建一个新列表,现在不指向同一个对象:
dummyList = dummyList + ['hello']
>>> testList is dummyList
False
但是,通过就地进行更改,例如使用 dummyList[0] = 'Hello'
,那么它只是对 dummyList
进行更改,它仍然指向与 testList
相同的东西。不同的是没有新的assignment。
您可以创建一个副本来完全避免这种情况:
testList = ["This", "Is", "A", "Test"]
dummyList = testList.copy()
>>> testList is dummyList
False
关于python - 添加到列表与更改列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52681147/