gpt4 book ai didi

python - 如何更改列表中的元素并保留原始列表的副本?

转载 作者:行者123 更新时间:2023-11-28 22:57:25 25 4
gpt4 key购买 nike

我四处搜索并尝试了很多东西,但我无法让它工作。我认为问题与 Python 列表名称如何指向 列表有关,而不是成为 实际列表,但我仍然无法弄清楚。情况是这样的(是字典列表):

list_original = [dictionary1, dictionary2, dictionary3]
dictionary2_modified = dictionarymodifier(dictionary2) #some function that modifies the chosen element
list_modified = [i for i in list_original] #makes copy of original list
for i,n in enumerate(dictionary_original):
if i==1:
list_modified[1] = dictionary2_modified #replaces element with modified version
return list_original, list_modified

还有很多类似的东西,但我总是要么得到两个原始列表,要么得到两个新列表!我补充说,我使用的是 python 2.4,对此别无选择。

非常感谢您的帮助

最佳答案

可变与不可变

您需要了解可变元素和不可变元素之间的区别。也就是说,Python 中的字典和列表都是可变的。这意味着如果你在一个地方修改它,它也会在另一个地方被修改。

此外,可变类型的变量(如listdict)也可以包含不可变元素(如str),以及反之亦然:不可变类型的变量(例如 tuple)可以包含可变元素(例如 listdict)。

可变性示例

因此,这使用列表示例显示了可变性:

>>> a = [1, 2, 3, 4]
>>> b = a
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a[2] = 'x'
>>> a
[1, 2, 'x', 4]
>>> b
[1, 2, 'x', 4]

如何获取list或dict的副本

要获取 list 的副本,您只需这样做:

new_list = old_list[:]  # the slicing at the end just takes the whole list

dict 的情况下,这通常就足够了:

new_dict = old_dict.copy()

嵌套列表/字典

然而,尽管列表/字典是扁平的或仅包含可变元素,可以按照我展示的方式进行复制,但要获得更复杂的可变数据结构的副本,您需要做更多的事情...

在这种情况下,copy 模块及其 deepcopy function 可能非常有用. copy 模块的文档详细说明了它的用途:

Assignment statements in Python do not copy objects, they create bindings between a target and an object. For collections that are mutable or contain mutable items, a copy is sometimes needed so one can change one copy without changing the other. This module provides generic shallow and deep copy operations (explained below).

关于python - 如何更改列表中的元素并保留原始列表的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14591626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com