题目部分(原文见公众号:python宝)

python宝

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjIyOTE4OQ==&scene=123#wechat_redirect

小麦苗DB宝

https://www.xmmup.com/

1、浅拷贝只拷贝父对象,不会拷贝父对象中子对象,只是做了内存地址引用,并没有拷贝

2、深拷贝不但拷贝父对象,父对象中的子对象也会拷贝,完全拷贝数据集合的所有

    数据,与源数据再无相关

3、不可变对象,无论是深拷贝还是浅拷贝,都不会发生拷贝

4、不可变数据类型:value值改变,id值也随之改(int、数字、元组)

5、可变数据类型:value值改变,id值不变,(字典型、列表型)

6、深拷贝和浅拷贝一样,都会创建一个新的容器对象(compound object),和浅拷

    贝的不同点在于,深拷贝对于对象中的元素,深拷贝都会重新生成一个新的对象

7、改变列表中不可变对象不影响浅拷贝,改变列表中的可变对象时浅拷贝也会改变

8、原列表的可变和不可变数据做什么改变都不会影响深拷贝对象

9、赋值语句并没有生成新的容器,跟浅拷贝的区别在于外面的容器也是指向的a的内存地址,并没有生成新的容器

10、可变、不可变、id

  • 可变对象:可变对象可以在其 id() 保持固定的情况下改变其取值;俗点讲就是一个对象在修改它的值时候,不会改变该对象所指向的内存地址。

  • 不可变对象:具有固定值的对象。不可变对象包括数字、字符串和元组。这样的对象不能被改变。如果必须存储一个不同的值,则必须创建新的对象。

  • id(object):函数用于获取对象的内存地址,函数返回对象的唯一标识符,标识符是一个整数。

答案部分

import copyprint("########################浅拷贝###########################")
# 改变列表中的不可变对象,不影响浅拷贝,改变列表中的可变对象,浅拷贝也会改变
a = [1, "hello", [2, 3], {"key": "123"}]
b = copy.copy(a)# 原a和浅拷贝b容器对象id不一样
print("原列表id:", id(a))
print("浅拷贝id:", id(b))
'''
原列表id:58401776
浅拷贝id:58401696
'''# 原a和浅拷贝b容器里面的元素对象id一样
print("原列表里可变对象id:", id(a[2]))
print("浅拷贝后可变对象id", id(b[2]))
'''
原列表里可变对象id:58401856
浅拷贝后可变对象id 58401856
'''
# 改变a的 数字和字符串对象
a[0] = 2# a 和b 的值不一样了
print("改变不可变对象后的a:", a)
print("改变不可变对象后的b:", b)
'''
[2, 'hello', [2, 3], {'key': '123'}]
[1, 'hello', [2, 3], {'key': '123'}]
'''# 但是后面的元素还是指的a
print("改变不可变对象后的a:", id(a[2]))
print("改变不可变对象后的b:", id(b[2]))
'''
58401856
58401856
'''# 改变a的 可变对象 [2, 4]
a[2][1] = 4print("改变可变对象后的a:", a)
print("改变可变对象后的b:", b)
'''
[2, 'hello', [2, 4], {'key': '123'}]
[1, 'hello', [2, 4], {'key': '123'}]
'''
print("改变可变对象后的a:", id(a[2]))
print("改变可变对象后的b:", id(b[2]))
'''
58401856
58401856
'''print("##########################深拷贝########################")
# 原列表的可变和不可变数据做什么改变都不会影响深拷贝对象
a = [1, "hello", [2, 3], {"key": "123"}]
b = copy.deepcopy(a)print("原列表a: ", id(a))    # 外面容器拷贝了,所以a和b的id不一样
print("深拷贝列表b: ", id(b))
'''5835968058401776
'''
# a和b容器里面的元素对象id
print("原列表中可变对象id:", id(a[2]))
print("深拷贝中可变对象id:", id(b[2]))
'''5840173658359000
'''
# 改变a的 可变对象 [2, 4]
a[1] = 3
a[2][1] = 4print("原列表改变可变对象:", a)
print("深拷贝中改变可变对象:", b)
'''
原列表改变可变对象:[1, 3, [2, 4], {'key': '123'}]
深拷贝中改变可变对象:[1, 'hello', [2, 3], {'key': '123'}]
'''print("原列表改变可变对象id:", id(a[2]))
print("深拷贝中改变可变对象id:", id(b[2]))
'''5840173658359000
'''print("############################赋值#############################")
a = [1, "hello", [2, 3], {"key": "123"}]
b = a
print("原列表:", id(a))
print("赋值后:", id(b))
'''
58401856
58401856
'''# a和b容器里面的元素对象id
print("原列表中id:", id(a[2]))
print("赋值后id", id(b[2]))
'''5840169658401696
'''a[0] = 2
a[2][1] = 5
print("原列表:", a)
print("赋值修改后", b)
'''
原列表:[2, 'hello', [2, 5], {'key': '123'}]
赋值修改后 [2, 'hello', [2, 5], {'key': '123'}]
'''
参考:https://blog.51cto.com/u_15249893/2848109?abTest=1
https://copyfuture.com/blogs-details/2020031720252559878eggumgw4iaj7c

https://blog.51cto.com/moshenglv/2170378?abTest=1

https://blog.51cto.com/topic/pythonqiankaobeiheshenkaobeimianshiti.html?page=8

About Me:小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

● 个人QQ:87605025

● QQ交流群py_data :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

如果你觉得到文章对您有帮助,点击下方我的头像,赞赏我哦!

有您的支持,小麦粒一定会越来越好!

【233】python—深拷贝与浅拷贝的区别相关推荐

  1. Python深拷贝和浅拷贝的区别

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

  2. python——深拷贝与浅拷贝的区别

    一.浅拷贝 原列表 data1=[8,24,[2,30,35]] 浅拷贝后的列表 data2=data1.copy()原列表的内存地址 print(id(data1)) 2726096606848 拷 ...

  3. python深拷贝和浅拷贝的区别_【转】python的复制,深拷贝和浅拷贝的区别

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,[& ...

  4. Python 深拷贝和浅拷贝的区别

    在Python中,对象的赋值,深浅拷贝之间是有很大差异的,入过在使用过程中不注意区别的的话,可能会产生意想不到的结果而不自知. 下面就通过简单地例子介绍一下这些概念之间的差别. 对象的赋值 直接看一段 ...

  5. Python基础:对象的深拷贝和浅拷贝的区别

    Python基础:对象的深拷贝和浅拷贝的区别 1 变量与对象 2 不可变对象与可变对象 3 直接赋值 4 浅拷贝 5 深拷贝 参考文献 1 变量与对象 对象:内存中存储数据的实体,有明确的类型.在Py ...

  6. python 深拷贝_详解python的复制,深拷贝和浅拷贝的区别

    概述 今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~ 需求: 将一个列表的数据复制到另一个列表中. 思路: 使用列表[:],拿不准可以调用copy模块. 实现方法: #!/u ...

  7. Python中深拷贝与浅拷贝的区别?

    往期面试题: 列举Python中的标准异常类? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 说说Python模块主要分哪三类? 废话不多说,开始今天的题目: 问:说说Pyt ...

  8. python的复制,深拷贝和浅拷贝的区别

    python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有 ...

  9. python中深拷贝与浅拷贝的区别

    ####################python中的数据类型####################### ##########python中的数据类型有6种,分别为:数字类型如int,float ...

最新文章

  1. pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)、pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行
  2. dell服务器系统开机提示错误解决方法
  3. JVM内存结构|本地方法栈和堆
  4. 基于JavaScript实现放大镜效果
  5. shell waite php,linux shell wait命令详解
  6. 数据分析工具测评!被Excel打过的“耳光”,现在可以还回去了
  7. 在线数据库链接字符串查询
  8. LeetCode12 整数转罗马数字
  9. 创建Spring项目没有Spring Config文件怎么办
  10. Android三横变叉动画,90%的孩子会写错的笔顺,动画演示来一波!一看就会!
  11. 全国各省市区县数据整理
  12. 清华梦的粉碎—写给清华大学的退学申请(by王垠)
  13. 台式计算机为什么数字输入不了,计算机键盘无法输入数字,为什么?
  14. android 磁盘读写速度,手机微硬盘读取速度50MB/s eMMC技术浅析
  15. 检索策略(抓取策略)
  16. Android面试知识点复习,那些不为人知的秘密
  17. Problem -B DBZ的钥匙
  18. 高含金量国际计算机编程竞赛
  19. 自动控制原理-频率特性 G(jw ) 定义
  20. Linux平台设备驱动

热门文章

  1. 知乎宣布完成2.7亿美元融资 引入前蜜芽合伙人孙伟为CFO
  2. ZOJ3716 Ribbon Gymnastics(贪心)
  3. 《怪诞行为学二》启发(一)
  4. 公司USB设备管理策略方案
  5. hadoop权威指南第三版 发布说明
  6. Virus total爬虫分享
  7. Lawliet|Python学习笔记——random库
  8. javascript框架库_2019年使用的最佳JavaScript框架,库和工具
  9. 视频打赏平台制作,微信打赏平台
  10. Cisco Catalyst 9000 系列,IOS-XE Release Bengaluru-17.06.01 ED