本站消息

站长简介/公众号


站长简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2021-02(20)

2021-03(44)

python浅拷贝和深拷贝的区别

发布于2021-12-02 00:18     阅读(373)     评论(0)     点赞(18)     收藏(5)



首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别。

什么是可变对象,什么是不可变对象:

可变对象是指,一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值;

不可变对象是指,一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了,但是可变对象就不会做这样的动作,而是直接在对象所指的地址上把值给改变了,而这个对象依然指向这个地址。

直接上示例看就明白了:

  1. #导入包
  2. import copy
  3. #浅拷贝--------------
  4. listA=[1,2,5, 6, ["a","b"]]
  5. c=copy.copy(listA)
  6. print(c)
  7. listA.append(7)
  8. listA[4].append("c")
  9. print(listA)
  10. print("c浅拷贝: ", c) #里面的子对象改变了
  11. #深拷贝------------------
  12. ls=[1,2,5, 6, ["a","b"]]
  13. d=copy.deepcopy(ls) # 拷贝对象, 也拷贝里面的子对象
  14. print(d)
  15. ls[4].append("c")
  16. print(ls)
  17. print("深拷贝d: ", d) # d 里的元素始终没有变化

结果:

  1. [1, 2, 5, 6, ['a', 'b']]
  2. [1, 2, 5, 6, ['a', 'b', 'c'], 7]
  3. c浅拷贝: [1, 2, 5, 6, ['a', 'b', 'c']]
  4. [1, 2, 5, 6, ['a', 'b']]
  5. [1, 2, 5, 6, ['a', 'b', 'c']]
  6. 深拷贝d: [1, 2, 5, 6, ['a', 'b']]

原文链接:https://blog.csdn.net/qq_61472107/article/details/121625687







所属网站分类: 技术文章 > 博客

作者:yoyo

链接:https://www.pythonheidong.com/blog/article/1106490/3b385dad9faa33d9a00d/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)