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

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

Linda Hamilton
发布: 2024-12-21 02:27:09
原创
705 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板