Python:为什么即使没有指示,列表值也会改变?

时间:2019-03-06 10:02:57

标签: python list memory

这让我感到困惑,即使没有触摸第二个列表,两个列表也在并行更改。

我搜索并发现我应该使用列表推导来获取新的指针,因此我不会使用相同的列表,但是不,它仍然可以执行以下操作! 我找不到在线这种行为的原因。

display_order = current_order[:]
print(current_order)
print(display_order)
display_order[0][3] = "CHANGE"
print(current_order)
print(display_order)

输出:

[['ID', 'Product', '999', 'Section', 'Seat']]
[['ID', 'Product', '999', 'Section', 'Seat']]
[['ID', 'Product', '999', 'CHANGE', 'Seat']]
[['ID', 'Product', '999', 'CHANGE', 'Seat']]

1 个答案:

答案 0 :(得分:0)

问题在于两个变量都指向内存中的同一内部列表。

display_order = current_order[:]

您会在内存中看到这种情况:

display order -----> [['ID', 'Product', '999', 'Section', 'Seat']]
                      ^
                      |
current_order ---------

它们都指向同一列表。

使用列表的深层副本可以避免这种情况,该副本会将第一个列表的值复制到内存中的新位置。将该行替换为以下行:

display_order = copy.deepcopy(current_order)