更改列表的元素会影响/不会影响派生列表

Sul*_*ate 2 python element list immutability mutability

我不理解Python中列表的以下异常行为,如果有人可以抛出一些亮点,我会很感激:

小片1:

myList = [1,2,3,4]
A = [myList]*3
print(A)
myList[2]=45
print(A)
Run Code Online (Sandbox Code Playgroud)

输出:

[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,因为我们没有执行额外的复制功能来"屏蔽"A对myList上的元素操作.

摘录2:

myList = [1,2,3,4]
A = myList*3
print(A)
myList[2]=45
print(A)
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

为什么对myList的更改未反映在A中?

Mar*_*som 5

在第一种情况下,您将myList直接复制3个引用.在第二种情况下,您复制了3个对内容的引用myList,这使您与原始内容无关myList.