【问题标题】:Python: Why do list values change even when not instructed?Python:为什么即使没有指示,列表值也会改变?
【发布时间】:2019-03-06 10:02:57
【问题描述】:

这让我很困惑,即使第二个没有被触及,两个列表也会同时发生变化。

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

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']]

【问题讨论】:

标签: python list memory


【解决方案1】:

问题是两个变量都指向内存中的同一个内部列表。 当你这样做

display_order = current_order[:]

你在记忆中得到那个情况:

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

它们都指向同一个列表。

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

display_order = copy.deepcopy(current_order)

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2021-11-25
    • 2022-12-17
    • 2013-02-12
    相关资源
    最近更新 更多