优草派 > 问答 > Python

图解Python中深浅copy(通俗易懂)

作者:qinjuan     

Python是一种高级编程语言,也是一种解释型语言,它支持多种编程范式,如面向对象、函数式和过程式编程。在Python中,深浅copy是一个非常常见的概念,同时也是一个容易被忽略的坑,本篇文章将从多个角度对Python中深浅copy进行详细分析,从而帮助读者更好地理解和掌握深浅copy的使用。

1. Python中的深浅copy

在Python中,深浅copy是指对于一个对象,将其复制给另一个对象的过程。其中,浅copy是指只复制了对象的引用,深copy是指复制了对象的值。具体来说,浅copy只复制了对象的一层内容,而深copy会一直复制下去,直到复制了整个对象。

下面通过代码来演示Python中的深浅copy。

# 浅copy

lst1 = [1, 2, [3, 4]]

lst2 = lst1.copy()

lst1[2][0] = 5

print(lst2) # [1, 2, [5, 4]]

# 深copy

import copy

lst1 = [1, 2, [3, 4]]

lst2 = copy.deepcopy(lst1)

lst1[2][0] = 5

print(lst2) # [1, 2, [3, 4]]

从上述代码可以看出,对于一个多层嵌套的列表,浅copy只复制了一层内容,而深copy则复制了整个列表。

2. Python中的copy()方法和赋值操作符

在Python中,除了使用copy模块中的deepcopy()方法进行深copy外,还可以使用copy()方法进行浅copy,或者使用赋值操作符进行对象复制。下面通过代码来演示这三种方法的区别。

lst1 = [1, 2, [3, 4]]

lst2 = lst1.copy()

lst3 = lst1

lst4 = copy.deepcopy(lst1)

lst1[2][0] = 5

print(lst2) # [1, 2, [5, 4]]

print(lst3) # [1, 2, [5, 4]]

print(lst4) # [1, 2, [3, 4]]

从上述代码可以看出,使用copy()方法进行浅copy和使用赋值操作符进行对象复制的结果是相同的,都只复制了对象的引用。而使用deepcopy()方法进行深copy则可以复制整个对象。

3. Python中的可变对象和不可变对象

在Python中,对象分为可变对象和不可变对象。不可变对象是指创建后其值无法更改的对象,如整数、字符串和元组等。而可变对象是指创建后其值可以更改的对象,如列表和字典等。

当对一个可变对象进行深copy时,会将其所有的子对象都进行复制。而对于不可变对象,深copy和浅copy的结果是相同的,因为不可变对象的值无法更改。

下面通过代码来演示这个问题。

# 不可变对象的深浅copy

tpl1 = (1, 2, [3, 4])

tpl2 = tpl1.copy()

tpl3 = copy.deepcopy(tpl1)

tpl1[2][0] = 5

print(tpl2) # (1, 2, [5, 4])

print(tpl3) # (1, 2, [3, 4])

从上述代码可以看出,对于不可变对象,深copy和浅copy的结果是相同的。

4. Python中的循环引用

在Python中,循环引用是指多个对象之间相互引用,形成一个环状结构。当对这种对象进行深copy时,会陷入无限递归,导致程序崩溃。

下面通过代码来演示循环引用的情况。

import copy

lst1 = [1, 2]

lst1.append(lst1)

lst2 = copy.deepcopy(lst1)

print(lst1) # [1, 2, [...]]

print(lst2) # [1, 2, [...]]

从上述代码可以看出,对于循环引用的对象,在使用深copy时会陷入无限递归,导致程序崩溃。

5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
相关问题
sql判断字段是否存在
python键值对
for循环可以遍历字典吗
怎么使用vscode
查看更多

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024