python - 添加到列表与更改列表元素

标签 python

看看下面的代码

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/

相关文章:

python - 如何在 Python 3 中使用 urllib 中的 basejoin

python - 如何在 "Check iO"游戏中使用 tests.py 文件在本地测试代码

python - 使用 shapely 测量区域属性的有效方法?

Python - 将包含实体引用的字符串显示为普通文本

python - 如何在 python 中打印消息框?

python - [Python+ Bokeh ] : how to make a needle dial?

Python如何按行比较2个数组中的元素

python - CumSum 数据帧行,如果值在另一个数据帧上

python - 如何摆脱 Pandasplot() 的额外图例条目?

python - 如何找出缺少哪个 Python 关键字参数?