page contents

Python=赋值、copy浅拷贝、deepcopy深拷贝,到底有什么区别?

改一个变量,另一个"好像"也跟着变了?很多人被 Python 的赋值和拷贝绕晕。下面用最简单的例子,把 =、copy()、deepcopy() 的区别讲清楚。

attachments-2026-10-GWHQd3AG6ac4528edeb20.png改一个变量,另一个"好像"也跟着变了?很多人被 Python 的赋值和拷贝绕晕。下面用最简单的例子,把 =、copy()、deepcopy() 的区别讲清楚。

先看现象:

   python

a = [1, 2, [3, 4]]
b = a            # 赋值
c = a.copy()     # 浅拷贝
d = a[:]         # 切片,也是浅拷贝

然后改一下 a 里那个子列表 [3, 4]:

   python

a[2][0] = 99
print(b)    # [1, 2, [99, 4]]  跟着变了
print(c)    # [1, 2, [99, 4]]  也变了!
print(d)    # [1, 2, [99, 4]]  也变了!

copy 明明"拷贝"了,怎么里面的子列表还是跟着变?

三者的本质

   

先分清"对象"和"引用"这两个词:

•`=`(赋值):只是让 b 和 a 指向同一个对象,没有任何拷贝。改谁改的都是同一份。

•`copy()`(浅拷贝):新建了外层列表,但只复制元素引用。外层的 1、2 是新的一份,但子列表 [3, 4] 这个对象是共享的,改它的内容会传染。

•`deepcopy()`(深拷贝):递归复制每一层,连子列表也新建一份,完全独立。

   python

import copy
e = copy.deepcopy(a)     # 深拷贝
a[2][0] = 99
print(e)    # [1, 2, [3, 4]]  完全不受影响

一张图看清三者的关系

   

   

a =[1,2,[3,4]]
       外层        子列表
a ──>[1,2] ──>[3,4]

b=a        b ──> 同一个 [1,2](同一对象)
c=a.copy()c ──> 新的 [1,2],但 ──> 同一个 [3,4](共享)
e=deepcopye ──> 新的 [1,2] ──> 新的 [3,4](全独立)

赋值连外层都共享;浅拷贝共享内层;深拷贝全独立。

【效果展示图位:copy.copy 与 copy.deepcopy 嵌套列表修改后对比输出的终端截图,发布时替换本行为图片】

 

什么时候该用哪个

   

•只是想给变量起个别名 → =

•只拷贝一层(元素都是不可变)→ copy() 就够

•有多层嵌套的可变结构(列表套列表、套字典),要完全独立 → deepcopy

   python

x = [1, 2, 3]
y = x.copy()
y[0] = 99
print(x)    # [1, 2, 3]  没影响,因为整数不可变

几个容易看走眼的地方

   

元组里套列表,同样会共享。 元组本身不可变,但里面的列表可变,改动会穿透:

   python

t = (1, [2, 3])
import copy
u = copy.copy(t)     # 元组没有 .copy(),要用 copy.copy
u[1].append(99)
print(t)    # (1, [2, 3, 99])  元组没变,但里面的列表被改了

`copy.copy` 对不可变对象直接返回原对象。 拷贝一个整数或字符串,得到的就是它自己,因为没必要复制。

`deepcopy` 能处理循环引用。 列表 A 里又引用了 A 自己,deepcopy 也能复制成一份独立的,不会死循环;浅拷贝则会一直共享。

实际用在哪

   

最常见的场景是做"数据快照":程序里一份数据要被改,但你想保留改动前的版本做对比或回滚。这时候 = 和浅拷贝都不靠谱(改了会传染),deepcopy 才是"留一份原始的"。

动手拷贝前,先问一句

   

= 是引用同一个对象;copy()(浅拷贝)复制外层、共享内层;deepcopy()(深拷贝)逐层复制、完全独立。判断依据就一条:结构里有没有嵌套的可变对象。有嵌套又要独立,用 deepcopy;只有一层,浅拷贝即可。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

  • 发表于 2026-10-06 09:44
  • 阅读 ( 19 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2484 篇文章

作家榜 »

  1. Pack 2484 文章
  2. 轩辕小不懂 2403 文章
  3. 小柒 2228 文章
  4. Nen 576 文章
  5. 王昭君 216 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章