首页 >后端开发 >Python教程 >如何在 Python 中正确克隆列表并避免意外修改?

如何在 Python 中正确克隆列表并避免意外修改?

Linda Hamilton
Linda Hamilton原创
2024-12-20 22:16:16182浏览

How to Properly Clone Lists in Python and Avoid Unexpected Modifications?

克隆列表:在 Python 中保持完整性

在 Python 中,将新变量分配给现有列表会创建浅表副本,使您容易受到影响意外的列表修改。让我们阐明为什么会发生这种行为,并探索有效的克隆方法来确保列表不变性。

为什么赋值不会导致克隆:

当您执行 new_list = 时my_list,您将指向同一列表对象的指针分配给 new_list。这两个变量都引用原始列表,使任何后续修改都在 new_list 和 my_list 中可见。

有效复制列表:

要创建真正的克隆,您需要几种方法:

1.使用 list.copy():

此方法在 Python 3.3 中引入,可创建列表的不同副本。

**2.使用 [:] 对列表进行切片:**

此语法会创建一个与原始列表具有相同元素的新列表。

3.使用列表构造函数 (list()):

这会从现有的可迭代对象创建一个新列表,例如另一个列表。

4.使用copy.copy():

这个内置函数提供了基本的浅拷贝,足以满足大多数用例。

5.使用 copy.deepcopy():

这种更全面的方法创建深度复制,其中嵌套对象也被克隆。

示例:

让我们比较一下这些结果方法:

import copy

my_list = ['foo', 'bar']

new_list = my_list.copy()
sliced_list = my_list[:]
list_constructor_list = list(my_list)
shallow_copy_list = copy.copy(my_list)
deep_copy_list = copy.deepcopy(my_list)

my_list.append('baz')

print(f'Original list: {my_list}')
print(f'Copied list: {new_list}')
print(f'Sliced list: {sliced_list}')
print(f'List constructed from iterator: {list_constructor_list}')
print(f'Shallow copy: {shallow_copy_list}')
print(f'Deep copy: {deep_copy_list}')

输出:

Original list: ['foo', 'bar', 'baz']
Copied list: ['foo', 'bar']
Sliced list: ['foo', 'bar']
List constructed from iterator: ['foo', 'bar']
Shallow copy: ['foo', 'bar']
Deep copy: ['foo', 'bar']

从输出中可以明显看出,my_list 在附加 'baz' 后发生了更改,而克隆的列表保持不变。

以上是如何在 Python 中正确克隆列表并避免意外修改?的详细内容。更多信息请关注PHP中文网其他相关文章!

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