更改列表的元素 affects/does 不会影响派生列表
Changing elements of a list affects/does not affect a derived list
我不理解 Python 中列表的以下异常行为,如果有人能提供一些线索,我将不胜感激:
片段 1:
myList = [1,2,3,4]
A = [myList]*3
print(A)
myList[2]=45
print(A)
输出:
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]
这对我来说很有意义,因为我们没有对 myList 上的元素操作 'shield' A 执行额外的复制功能。
片段 2:
myList = [1,2,3,4]
A = myList*3
print(A)
myList[2]=45
print(A)
输出:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
为什么对 myList 的更改没有反映在 A 中?
在第一种情况下,您直接复制了 3 个对 myList
的引用。在第二种情况下,您复制了对 myList
的 内容 的 3 个引用,这使您与原始 myList
.[=13= 没有任何联系]
我不理解 Python 中列表的以下异常行为,如果有人能提供一些线索,我将不胜感激:
片段 1:
myList = [1,2,3,4]
A = [myList]*3
print(A)
myList[2]=45
print(A)
输出:
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]
这对我来说很有意义,因为我们没有对 myList 上的元素操作 'shield' A 执行额外的复制功能。
片段 2:
myList = [1,2,3,4]
A = myList*3
print(A)
myList[2]=45
print(A)
输出:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
为什么对 myList 的更改没有反映在 A 中?
在第一种情况下,您直接复制了 3 个对 myList
的引用。在第二种情况下,您复制了对 myList
的 内容 的 3 个引用,这使您与原始 myList
.[=13= 没有任何联系]