首页 >后端开发 >Python教程 >如何创建 Python 列表的真实副本以避免意外修改?

如何创建 Python 列表的真实副本以避免意外修改?

Linda Hamilton
Linda Hamilton原创
2024-12-21 02:27:09726浏览

How Can I Create a True Copy of a Python List to Avoid Unintentional Modifications?

克隆未更改分配的列表:综合指南

在 Python 中,使用 new_list = my_list 将列表分配给新变量不是正版。相反,会创建对原始列表的引用。因此,对新列表的修改也会改变原始列表。

为了防止这些意外更改,克隆或复制列表至关重要。以下是几种方法:

  • 内置 list.copy() 方法:(Python 3.3 和稍后)
new_list = old_list.copy()
  • 切片:
new_list = old_list[:]
  • 内置列表()构造函数:
new_list = list(old_list)
  • 通用 copy.copy():
import copy
new_list = copy.copy(old_list)
  • Generic copy.deepcopy():(嵌套复制elements)
import copy
new_list = copy.deepcopy(old_list)

考虑一个带有嵌套列表和实例的示例:

class Foo(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return f'Foo({self.val!r})'

foo = Foo(1)

a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)

a.append('baz')  # Modify original list
foo.val = 5  # Modify nested instance

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')

输出:

original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]

如您所见,虽然原始列表和嵌套实例发生了变化,但只有深度复制(f)准确地复制了它们,并保留了以前的值。

以上是如何创建 Python 列表的真实副本以避免意外修改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn