python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法

python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法Python 深拷贝和浅拷贝使用方法发布时间 2020 06 0616 52 01 来源 亿速云阅读 182 这篇文章运用了实例代码展示 Python 深拷贝和浅拷贝使用方法 代码非常详细 可供感兴趣的小伙伴们参考借鉴 希望对大家有所帮助 一 浅拷贝所谓浅拷贝 指的是对于某个对象 虽然创建了与该对象具有相同值的另一个对象 但是 这两个对象內部嵌套的对应子对象全都是同一个对象 简单地说 外部进行了拷贝 内部

Python深拷贝和浅拷贝使用方法

发布时间:2020-06-06 16:52:01

来源:亿速云

阅读:182

这篇文章运用了实例代码展示Python深拷贝和浅拷贝使用方法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。

一、浅拷贝

所谓浅拷贝,指的是对于某个对象,虽然创建了与该对象具有相同值的另一个对象,但是,这两个对象內部嵌套的对应子对象全都是同一个对象。简单地说,外部进行了拷贝,内部没有拷贝。

以下方式得到的拷贝都是浅拷贝:

● 切片操作[:]

● 调用列表、字典、集合的方法copy()

● 调用内置函数List()、dict()、set(4.

● 调用标准库模块copy中的函数copy()import copy  # 导入标准库模块copy

L1 = [1,[1,2,3],6]

L2 = L1.copy() # [1, [1, 2, 3], 6] 使用list.copy()

L2 = L1[:] # [1, [1, 2, 3], 6] # 使用索引切片的方式

L2 = list(L1) #  [1, 2, 3], 6] # 使用list()函数赋值

L2 = copy.copy(L1) # [1, [1, 2, 3], 6]  # 调用标准库模块copy中的函数copy()

# 通过打印L1和L2的id可以看出,L2只拷贝了L1的外部,形成了一个和L1具有相同值的对象

# L1和L2内部值的id全都相同,即引用的同一内存地址

print(‘L1_id:%d’ % id(L1)) # L1_id:9056

print(‘L2_id:%d’ % id(L2)) # L2_id:9456

print(‘L1[1]_id:%d’ % id(L1[1])) # L1[1]_id:9376

print(‘L2[1]_id:%d’ % id(L2[1])) # L2[1]_id:9376

print(‘id_L1[2] %d’ % id(L1[2])) # id_L1[2] 

print(‘id_L2[2] %d’ % id(L2[2])) # id_L2[2] 

# 浅拷贝,对于列表内部嵌套的可变类型对象,修改L1[1][1]值,L2[1][1]值也会跟着改变

# 实际上他们内部都引用着同一个内存id

L1[1][1] = 5

print(L1) # [1, [1, 5, 3], 6]

print(L2) # [1, [1, 5, 3], 6]

print(‘L1[1]_id:%d’ % id(L1[1])) # L1[1]_id:9376

print(‘L2[1]_id:%d’ % id(L2[1])) # L2[1]_id:9376

# 浅拷贝,对于列表内部的不可变类型对象,修改L1[2],

# 因为是不可变类型,那么会重新调用一个值给予引用,L2[2]因此不受影响

L1[2] = 8

print(L1) # [1, [1, 5, 3], 8]

print(L2) # [1, [1, 5, 3], 6]

print(‘id_L1[2] %d’ % id(L1[2])) # id_L1[2] 

print(‘id_L2[2] %d’ % id(L2[2])) # id_L2[2] 

二、深拷贝

所谓深拷贝,指的是:对于某个对象,创建与该对象具有相同值的另一个对象,同时,这两个对象内部嵌套的对应可变子对象全都不是同一个对象。简单地说,外部和内部都进行了拷贝。

深拷贝的方法:

● 调用标准库模块copy中的函数deepcopy()import copy  # 导入标准库模块copy

L1 = [1,[1,2,3],6]

L2 = copy.deepcopy(L1) # [1, [1, 2, 3], 6]

# 通过打印L1和L2的内存地址可以看出,其外部进行拷贝,L2是和L1具有相同值的新对象

# 对于内部嵌套的可变类型对象,L1[1]和L2[1]内存地址并不相同

# 对于内部嵌套的不可变类型对象,L1[2]和L2[2]内存地址相同,引用的同一内存地址

print(‘L1_id:%d’ % id(L1)) # L1_id:3792

print(‘L2_id:%d’ % id(L2)) # L2_id:3952

print(‘L1[1]_id:%d’ % id(L1[1])) # L1[1]_id:3472

print(‘L2[1]_id:%d’ % id(L2[1])) # L2[1]_id:4512

print(‘id_L1[2] %d’ % id(L1[2])) # id_L1[2] 

print(‘id_L2[2] %d’ % id(L2[2])) # id_L2[2] 

# 深拷贝,列表内部嵌套的可变类型对象,修改L1[1][1] 为5不影响L2[1][1]的值,

# 深拷贝是将L1和L2内部可变类型对象的值引用的内存地址分开来

L1[1][1] = 5

print(L1) # [1, [1, 5, 3], 6]

print(L2) # [1, [1, 2, 3], 6]

print(‘L1[1]_id:%d’ % id(L1[1])) # L1[1]_id:3472

print(‘L2[1]_id:%d’ % id(L2[1])) # L2[1]_id:4512

# 深拷贝,对于列表内部不可变类型对象,修改L1[2] = 8,因为是不可变类型,所以将L1[2]重新赋值引用,不影响L2[2]

L1[2] = 8

print(L1) # [1, [1, 5, 3], 8]

print(L2) # [1, [1, 2, 3], 6]

print(‘id_L1[2] %d’ % id(L1[2])) # id_L1[2] 

print(‘id_L2[2] %d’ % id(L2[2])) # id_L2[2] 

如果你能读到这里,恭喜你已经对Python深拷贝和浅拷贝有了从实践层面最深刻的体会了。如果想阅读更多相关内容的文章,欢迎关注亿速云行业资讯频道!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219834.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:47
下一篇 2026年3月17日 下午9:47


相关推荐

  • NPOI导出Excel并下载到客户端

    NPOI导出Excel并下载到客户端利用NPOI导出Excel,把Excel发送到客户端

    2022年6月22日
    78
  • supervisor 进程管理

    supervisor 进程管理supervisor 进程管理

    2022年4月24日
    49
  • SpringBoot面试题及答案140道(2021年最新)

    SpringBoot面试题及答案140道(2021年最新)工作5年,处于找工作中ing。今年10月份刚刚整理出来的SpringBoot面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的SpringBoot面试题答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!1、SpringBoot有哪些优点?SpringBoot的优点有:1、减少开发,测试时间和努力。2、使用JavaConfig有助于避免使用XML。3、避免大量的Maven…

    2022年6月7日
    35
  • SecureCRTPortable样式设置

    SecureCRTPortable样式设置SecureCRTPortable高大上设置背景设置进入界面——最上方选项——会话选项——外观,进行如下设置设置完成后就会出现高大上的大神界面

    2022年4月29日
    87
  • qlineedit设置光标_光标选不中

    qlineedit设置光标_光标选不中QLineEdit的光标当失去焦点后仍然显示的问题:  在lineedit和其它按钮之间切换焦点时,注意lineedit的设置有顺序,否则当失去焦点时仍有光标闪,或者得到焦点无光标。  使lineedit有效:lineedit->setEnabled(true);lineedit->setFocus();    使lineedit无效:l…

    2022年10月5日
    4
  • 上下文无关语法

    上下文无关语法直观的理解 V 变元指代一类事物 如 V 指代动词 那么 T 总结符就是一系列具体动作 初始符就是文化最开始 未发生任何变化时的样子 产生式麻 就是动词到具体动作的映射过程 上下文无关文法是形式化描述语言的又一种工具 它表示语言的能力强于有穷自动机和正则表达式 但也有无法它表示的语言 基本思想是用变量表示串的集合 递归的使用变量去定义变量 因此善于表示嵌套的结构

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号