Python List深度使用(二)

简介: 在 Python 中,列表的复制过程中,浅拷贝和深拷贝是两种不同的方式。浅拷贝只是复制了一层引用,而不会复制引用所指向的对象,因此在修改原始列表中嵌套的可变对象时,新列表也会随之改变。深拷贝则会递归复制所有的对象,包括嵌套的可变对象,因此不受原始列表的影响。如果列表中没有嵌套的可变对象,或者对新列表的改动不影响原始列表,则可以使用浅拷贝。浅拷贝是指在复制一个对象时,仅复制对象本身和对象内部第一层的引用,而不会复制其内部的对象。深拷贝是指在复制一个对象时,不仅复制对象本身,还会递归复制其内部的所有对象。

Python List深拷贝与浅拷贝

在Python中,List是一种常用的数据类型,它可以保存多个元素,并支持增删改查等常见操作。在对List进行复制时,需要注意深拷贝和浅拷贝的区别,这将直接影响到程序的正确性和性能。

  1. 浅拷贝

浅拷贝是指在复制一个对象时,仅复制对象本身和对象内部第一层的引用,而不会复制其内部的对象。在Python中,可以使用copy()函数或者切片操作实现List的浅拷贝。例如:

>>> a = [1, 2, [3, 4]]
>>> b = a.copy()
>>> c = a[:]
>>> print(id(a), id(b), id(c))
139905328942336 139905328942720 139905328942400
>>> a[2][0] = 5
>>> print(b)  # [1, 2, [5, 4]]
>>> print(c)  # [1, 2, [5, 4]]

image.gif

可以看到,当修改原始List中嵌套的可变对象时,浅拷贝的新List也会随之改变。因为浅拷贝只是复制了一层引用,而不会复制引用所指向的对象。

       2.深拷贝

深拷贝是指在复制一个对象时,不仅复制对象本身,还会递归复制其内部的所有对象。在Python中,可以使用deepcopy()函数实现List的深拷贝。例如:

>>> import copy
>>> a = [1, 2, [3, 4]]
>>> b = copy.deepcopy(a)
>>> print(id(a), id(b))
139905328942336 139905328942912
>>> a[2][0] = 5
>>> print(b)  # [1, 2, [3, 4]]

image.gif

可以看到,当修改原始List中嵌套的可变对象时,深拷贝的新List不会随之改变。因为深拷贝会递归复制所有的对象,包括嵌套的可变对象。

3.总结

在 Python 中,列表的复制过程中,浅拷贝和深拷贝是两种不同的方式。浅拷贝只是复制了一层引用,而不会复制引用所指向的对象,因此在修改原始列表中嵌套的可变对象时,新列表也会随之改变。深拷贝则会递归复制所有的对象,包括嵌套的可变对象,因此不受原始列表的影响。

在实际开发中,需要根据具体情况选择浅拷贝或深拷贝。如果列表中没有嵌套的可变对象,或者对新列表的改动不影响原始列表,则可以使用浅拷贝。如果列表中有嵌套的可变对象,并且需要对新列表进行修改而不影响原始列表,则必须使用深拷贝。

目录
相关文章
|
6月前
|
索引 Python
Python错误 - 'list' object is not callable 的问题定位与解决
出现编程问题并不可怕,关键在于是否可以从中学习与成长。遇到'list' object is not callable这样的错误,我们不仅需要学会应对,更需要了解其背后的原因,避免类似的问题再次出现。记住,Python的强大功能和灵活性同时也意味着我们需要对其理解更准确,才能更好的使用它。
671 70
|
10月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
167 9
|
10月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
234 14
|
10月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
619 10
|
12月前
|
测试技术 开发者 Python
在 Python 中创建列表时,应该写 `[]` 还是 `list()`?
在 Python 中,创建列表有两种方法:使用方括号 `[]` 和调用 `list()` 函数。虽然两者都能创建空列表,但 `[]` 更简洁、高效。性能测试显示,`[]` 的创建速度比 `list()` 快约一倍。此外,`list()` 可以接受一个可迭代对象作为参数并将其转换为列表,而 `[]` 则需要逐一列举元素。综上,`[]` 适合创建空列表,`list()` 适合转换可迭代对象。
134 1
在 Python 中创建列表时,应该写 `[]` 还是 `list()`?
|
12月前
|
索引 Python
Python列表操作-推导式(List Comprehension)
Python列表操作-推导式(List Comprehension)
501 0
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
262 7
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
185 0
|
SQL 机器学习/深度学习 算法
【python】python指南(五):静态类型注解之List
【python】python指南(五):静态类型注解之List
151 0
【python】python指南(五):静态类型注解之List

推荐镜像

更多