按照以下不同情况,在IDE中逐个解除注释,就明白了


import copy"""
第一种情况,不可变类型变量,都是引用
"""
# a = 1
# a = (11, 222, 333)
# a = 'string'
# a = True
# b = a
#
# print(id(a))
# print(id(b))
#
# c =copy.copy(a)
# d = copy.deepcopy(a)
# print(id(c))
# print(id(d))"""
第二种情况,可变类型变量,浅拷贝和深拷贝都开辟了空间
备注:[(1,2),3]外层可变,内层不可变,同此类型。
"""
# a = [2, 3, 4]
# # a = {2,5,6}
# # a = {"name": "jim"}
# b = a
# c =copy.copy(a)
# d = copy.deepcopy(a)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
#
# # ................
# a.append(5)
# # ----------------
#
# print(a)
# print(b)
# print(c)
# print(d)"""
第三种情况,内外层都是不可变类型的,深浅拷贝都是引用
"""
# a = ((1,2),)
# b = a
# c =copy.copy(a)
# d = copy.deepcopy(a)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
#
#
# print(a)
# print(b)
# print(c)
# print(d)"""
第四种情况,外层不可变,内层可变,因为浅拷贝对不可变类型只是指向了,也即引用了内存地址,深拷贝重新开辟了内存地址。
"""
# e = 1
# f = 2
# list1 = [e, f]
# a = (list1,) # a= ([1,2],)
# b = a
#
# print(id(a))
# print(id(b))
#
# c =copy.copy(a)
# d = copy.deepcopy(a)
# print(id(c))
# print(id(d))
#
# list1.append(8)
#
# print(id(a))
# print(id(b))
# print(id(c))
# print(id(d))
# print(a)
# print(b)
# print(c)
# print(d)"""
第五种情况,外层可变,内层可变----真正体现浅拷贝和深拷贝的差距,a[:]是一种浅拷贝。深浅拷贝都重新开辟了内存空间,浅拷贝的内层元素只是引用了内存地址,深拷贝的内层元素也重新开辟了内存空间。"""
e = 1
f = 2
list1= [e,f]g = 3
h = 4
list2 = [g,h]a = [list1,list2]
b = a
c =copy.copy(a)
d = copy.deepcopy(a)print(id(a))
print(id(b))
print(id(c))
print(id(d))print(a)
print(b)
print(c)
print(d)print("*" * 20)# 改变e或者f的元素list1.append('list1')print(id(a))
print(id(b))
print(id(c))
print(id(d))print(a)
print(b)
print(c)
print(d)print("*" * 20)
a.append('a')print(id(a))
print(id(b))
print(id(c))
print(id(d))print(a)
print(b)
print(c)
print(d)

转载于:https://blog.51cto.com/13914991/2156964

浅析Python中深拷贝和浅拷贝相关推荐

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

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

  2. python中深拷贝和浅拷贝_**Python中的深拷贝和浅拷贝详解

    甚至连type其本身都是对象,type对象 Python中变量与C/C++/Java中不同,它是指对象的引用,Python是动态类型,程序运行时候,会根据对象的类型 来确认变量到底是什么类型. 单独赋 ...

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

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

  4. python中深拷贝和浅拷贝

    转载于:https://www.cnblogs.com/mihoutao/p/10955858.html

  5. python中的序列类型数据结构元素的切片操作_浅析python中的分片与截断序列

    浅析python中的分片与截断序列 序列概念 在分片规则里list.tuple.str(字符串)都可以称为序列,都可以按规则进行切片操作 切片操作 注意切片的下标0代表顺序的第一个元素,-1代表倒序的 ...

  6. python中的列表和元组_浅析Python中的列表和元组

    区别列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数). 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变. 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问 ...

  7. python多线程好还是多协程好_深入浅析python中的多进程、多线程、协程

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  8. 【从零学Python】深拷贝和浅拷贝、二维数组初始化

    Python 的深拷贝和浅拷贝 直接赋值: 其实就是对象的引用(别名). 浅拷贝(copy): 拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcop ...

  9. C++中深拷贝和浅拷贝

    C++中深拷贝和浅拷贝的问题是很值得我们注意的知识点,如果编程中不注意,可能会出现疏忽,导致bug.本文就详细讲讲C++深浅拷贝的种种. 对于一般的对象,如: C++代码 int a = 10; in ...

最新文章

  1. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解
  2. Python 之父立 Flag:明年要把 Python 速度提高 2 倍!
  3. PostgreSQL 业务数据质量 实时监控 实践
  4. java 范式 问号_巴科斯范式和扩展巴科斯范式
  5. 微抖动,繁忙的等待和绑定CPU
  6. 配置NAT超载(NAPT)
  7. SSH Config Editor Mac(SSH配置编辑器)V2.2
  8. JAVA笔记20-容器之四Map接口、自动打包、泛型(重要)
  9. 对称密钥与非对称密钥
  10. Clark变换的等幅值变换乘为什么2/3
  11. 微信中怎么打开apk文件 微信跳转打开外部浏览器打开apk文件
  12. 修改xcode字体大小(Mac)
  13. Run-Down 保护
  14. 微信点击链接或者扫描二维码通过默认浏览器打开指定链接是如何实现的
  15. 移动端页面布局方式,简单记录一下
  16. 计算机睡眠打印机不能用,计算机打印机不能用怎么办?
  17. Layabox 实现画 刚体线
  18. Python对列表去重的多种方法(四种方法)
  19. influx的常规操作
  20. JavaScript-狂神说笔记

热门文章

  1. powershell 下独立silent 安装 浏览器问题
  2. 模板参数仅作为函数的返回值
  3. 人类染色质开放状态数据库,ATACdb使用介绍
  4. Java实现选择排序及其优化
  5. mysql 不停机_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
  6. 安装ssr_12月23日先锋首测启动,累计登录3天必得SSR!
  7. sh密码登录mysql_Shell下实现免密码快速登陆MySQL数据库的方法
  8. JC法在matlab,自贡自流井启闭机--四川闸门厂家产品中心
  9. linux下载带中文名的文件夹,如何在Linux下删除文件名是乱码或者带有特殊字符的文件...
  10. 【Python】利用Conda尝鲜Python 3.10