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

时间:2018-10-06 16:37:29

标签: 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的内容?

2 个答案:

答案 0 :(得分:6)

通过使用=运算符,您使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,它仍然指向与{{1} }。区别在于没有新任务。

您可以创建一个副本来完全避免这种情况:

testList

答案 1 :(得分:5)

在第一个示例中,您编辑列表,仅构造了一个 new 列表,并将该 new 列表存储在{ {1}}变量。但是旧列表从未改变。

在第二个示例中,您编辑该列表。由于function resize(array, i, j) { var gen = array.reduce((a, b) => a.concat(b))[Symbol.iterator](); return Array.from({ length: i }, _ => Array.from({ length: j }, _ => gen.next().value)); } console.log(resize([[0, 1, 2, 3, 4, 5]], 2, 3));dummyList引用了 same 列表,因此两个变量的确显示了以dummyList作为第一个元素的列表。

可以通过使用testList添加元素来编辑列表:

'Hello'