Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊一聊Python中的浅拷贝和深拷贝

聊一聊Python中的浅拷贝和深拷贝

作者头像
罗罗攀
发布于 2021-12-06 09:55:34
发布于 2021-12-06 09:55:34
50000
代码可运行
举报
运行总次数:0
代码可运行

前言

我们知道列表是可变对象,指向他的变量都会根据他的变化而变化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l1 = [1, 2, 3]
l2 = l1
l1.append(4)
print(l1, l2)

# [1, 2, 3, 4] [1, 2, 3, 4]

所以我们就要用拷贝方法,这样就不会受其影响了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l1 = [1, 2, 3]
l2 = list(l1)
l1.append(4)
print(l1, l2)

# [1, 2, 3, 4] [1, 2, 3]

那这里的l2 = list(l1)是浅拷贝还是深拷贝,你知道吗?

浅拷贝

浅拷贝的方法主要有三种,通过数据构造器(list、set)、切片,或者copy.copy()的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import copy
l1 = [1, 2, 3]
l2 = list(l1)
l3 = l1[:]
l4 = copy.copy(l1)

浅拷贝意味着构造一个新的集合对象,然后用原始对象中找到的子对象的引用来填充它。从本质上讲,浅层的复制只有一层的深度。我们来举个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l1 = [[1, 2], 3]
l2 = list(l1)
l1.append(4)
l1[0].append(5)
print(l1, l2)

# [[1, 2, 5], 3, 4]  [[1, 2, 5], 3]

由于浅拷贝是赋值一层,所以l1.append(4)不会影响l2,但第二层其实是对l1的引用,所以在嵌套列表中修改会影响l2。

深拷贝

要想拷贝对象与原对象完全没有关系,就需要使用深拷贝,深拷贝用copy.deepcopy()方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import copy

l1 = [[1, 2], 3]
l2 = copy.deepcopy(l1)
l1.append(4)
l1[0].append(5)
print(l1, l2)

# [[1, 2, 5], 3, 4] [[1, 2], 3]

深拷贝使复制过程递归。这意味着首先构造一个新的集合对象,然后递归地用在原始对象中找到的子对象的副本填充它。

今天的分享就到这了,我们下期再见~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/9/17 上,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python之浅拷贝与深拷贝
当b = a时,实际上是将a列表的内存地址赋值给了b,那么变量a与变量b指向的是同一内存地址!
py3study
2020/01/09
5390
Python中浅拷贝和深拷贝的区别总结与
单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # 可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址不相同 单层深拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.deepcopy(a) print(id(a),id(copy_a)) #
py3study
2020/01/21
5170
Python面试题目之深浅拷贝浅析
b是对a列表的又一个引用,所以a、b是完全相同的,可以通过id(a)==id(b)证明。
Jetpropelledsnake21
2019/02/15
8400
Python中深拷贝与浅拷贝介绍
运行结果:(id函数每次打印的值都是不一样的哈,所以你们到时候本地运行的时候,结果跟我的截图会对应不上,但是效果是类似的)
小博测试成长之路
2023/09/01
2810
Python中深拷贝与浅拷贝介绍
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
话说,网上已经有很多关于Python浅拷贝和深拷贝的文章了,不过好多文章看起来还是决定似懂非懂,所以决定用自己的理解来写出这样一篇文章。
宇宙之一粟
2020/10/26
7130
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
​深度解析Python的赋值、浅拷贝、深拷贝
拷贝 就是把原数据复制一份,在复制的数据上随意改动不会影响到其原数据。也就是这里讲的深拷贝。
忆想不到的晖
2021/04/04
5K0
一文搞懂Python深拷贝与浅拷贝使用和区别
欢迎阅读本篇关于Python中深拷贝与浅拷贝的入门到精通指南。在Python开发中,理解拷贝是至关重要的,因为它涉及到数据的复制和共享,对于避免潜在的bug和性能优化都有着重要作用。本文将为您深入浅出地介绍深拷贝和浅拷贝的概念、区别以及如何在不同场景下正确应用它们。
子午Python
2023/09/08
1.1K0
图解 Python 浅拷贝与深拷贝
从字面上看,上述语句创建了变量 lst 和 new_list,并且 lst 和 new_list 的赋值都为一个列表。但是,Python 的赋值语句并不会复制对象,而是会重新创建一个对象的引用。
lyhue1991
2020/07/20
1.1K0
图解 Python 浅拷贝与深拷贝
Python 深拷贝、浅拷贝
从上面的示例来看,b = a 与 c = copy.copy(a) 这两种方式下,b 与 a 的内存地址都是 140490275823112 ,但是 c 的内存地址却是 140490271207112 。c 已经指向了另一个内存地址了。 说明: b = a 符合浅拷贝的规则。
Devops海洋的渔夫
2019/05/31
1.1K0
Python列表赋值,复制,深拷贝以及5种浅拷贝详解
在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢?
一墨编程学习
2019/05/17
5.1K0
Python中浅拷贝与深拷贝的骚操作
为什么同样是list3 = list1[:] 执行list1.sort() 操作,list3不发生变化 执行list1[0][0] = 111 操作,list3发生变化
Ai学习的老章
2020/09/14
3690
Python对象的深浅拷贝,你到底变不变
注意a is b == True 只适合和用于-5 到256之间,这个不知道你是否知道,我觉得面试官肯定不知道。
润森
2020/04/11
4030
copy.deepcopy()_python切片是深拷贝还是浅拷贝
代码说明:当改变 复杂子对象中的元素时,浅复制值发生了变化; 当改变的值不是复杂子对象,浅复制的值没有发生变化。因为 浅复制 ,复杂子对象的保存方式是 作为 引用 方式存储的,所以修改 浅复制的值 和原来的值都可以 改变 复杂子对象的值。
全栈程序员站长
2022/11/15
4670
Python中浅拷贝与深拷贝
Python中的赋值语句没有创建副本对于对象来说,它们只是将名称绑定到对象。对于不可变的对象来说,通常是没有什么区别的。但是,为了处理可变对象或可变对象的集合,我们可能需要一种方法来创建这些对象的“真实副本“。
Python知识大全
2020/02/13
1.2K0
python函数——浅拷贝copy()以及深拷贝deepcopy()
在python 中我们想备份一个list ,但是如果改变其中一个值,另外一个也会变,如下所示:
莫斯
2020/09/10
5970
9.python 浅拷贝和深拷贝
何谓浅拷贝/深拷贝,说得直白一点,其实就是数据拷贝,两者到底有什么区别呢?听着就挺迷糊的,python开发项目的时候说不定你就能碰上这样的坑~~
猿说编程[Python和C]
2020/03/12
9220
9.python 浅拷贝和深拷贝
14.Python深拷贝和浅拷贝详解
在Python中,变量实际上是对象的引用。当我们将一个变量赋值给另一个变量时,实际上是创建了一个新的引用指向同一个对象。
全栈若城
2025/04/12
1530
【PY】让 ChatGPT 来讲解浅拷贝与深拷贝
面试过 Python 工程师的小伙伴都知道,Python 中的浅拷贝和深拷贝是面试高频题,那么接下来,让我们使用 ChatGPT 并结合自己的理解来讲述一下什么是浅拷贝与深拷贝。
sidiot
2023/08/30
2060
【PY】让 ChatGPT 来讲解浅拷贝与深拷贝
Python中深拷贝与浅拷贝的区别?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
3280
Python 中浅拷贝和深拷贝的区别
CVPR 2021 相关论文、代码 、解读和demo整理,同时为了方便下载论文,已把部分论文上传到上面了,欢迎小伙伴们 star 支持一波!
AI算法与图像处理
2021/04/21
1K0
Python 中浅拷贝和深拷贝的区别
相关推荐
python之浅拷贝与深拷贝
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验