根据数据类型分为两部分进行剖析:

  • int、str类型     
  • list、tuple、dict类型等

1.  int、str类型

【int类型实例】
>>> import copy # 导入copy模块
>>> a1=11
>>> a2=a1 # 直接赋值引用
>>> a3=copy.copy(a1) # 浅拷贝
>>> a4=copy.deepcopy(a1) # 深拷贝
>>> id(a1),id(a2),id(a3),id(a4)
>>> (1357559168, 1357559168,1357559168,1357559168) 【str类型实例】
>>> import copy # 导入copy模块
>>> b1='css'
>>> b2=b1 # 直接赋值引用
>>> b3=copy.copy(b1) # 浅拷贝
>>> b4=copy.deepcopy(b1) # 深拷贝
>>> id(b1), id(b2),id(b3),id(b4)
>>> (43826624,43826624,43826624,43826624)

由以上实例可得出:int和str类型,无论是直接赋值引用 or 深浅拷贝,均指向同一块内存空间,因此对于int和str类型的变量而言,三种方法作用相同

2. list、tuple、dict等类型(以list类型为例

【示例】
>>> import copy # 导入copy模块
>>> L1=[11,22,33,['a','b','c']] # 定义list变量,其中L1[3]的值是一个子列表
>>> L2=L1 # 直接赋值引用
>>> L3=copy.copy(L1) # 浅拷贝
>>> L4=copy.deepcopy(L1) # 深拷贝
>>> id(L1),id(L2),id(L3),id(L4)
>>> (43777928,43777928,43776968,43795912)
>>> L1.append(44) # L1列表父对象添加元素
>>> L1[3].append('d') # L1列表子对象添加元素
>>> L1
>>> [11,22,33,['a','b','c','d'],44]
>>> L2
>>> [11,22,33,['a','b','c','d'],44]
>>> L3
>>> [11,22,33,['a','b','c','d']]
>>> L4
>>> [11,22,33,['a','b','c']]

以上示例说明:

1. 直接赋值即是对象的引用,指向同一内存地址

2. 浅拷贝:只拷贝一层,如上述示例,只拷贝父对象,不拷贝父对象内部的子对象(L3[3]仍指向原L1子对象的内存地址),故分别在L1父对象和子对象中添加元素44和'd', 对L3父对象无影响,只对其子对象有影响

3. 深拷贝:拷贝父对象及子对象

python直接赋值、深浅拷贝实例剖析的更多相关文章

  1. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  2. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  3. 第五篇python进阶之深浅拷贝

    目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...

  4. python 赋值 深浅拷贝

    深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...

  5. 人生苦短之我用Python篇(深浅拷贝、常用模块、内置函数)

    深浅拷贝 有时候,尤其是当你在处理可变对象时,你可能想要复制一个对象,然后对其做出一些改变而不希望影响原来的对象.这就是Python的copy所发挥作用的地方. 定义了当对你的类的实例调用copy.c ...

  6. Python中的深浅拷贝

    1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...

  7. python基础(6)-深浅拷贝

    赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...

  8. Python基础【3】:Python中的深浅拷贝解析

    深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...

  9. 挖一挖python中的深浅拷贝问题

    前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...

随机推荐

  1. Nginx的location配置概述【转】

    语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可.nginx不对url做编码,因此请 ...

  2. bzoj 4513 [Sdoi2016]储能表

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4513 题解 要求的式子 用数位dp的方法去做 我们把式子拆开 变成 $\sum_{i=0}^ ...

  3. 构造 Bubble Cup 8 - Finals D. Tablecity

    题目传送门 题意:在1000*2的格子里,在每个小时能派出两个警察在两个地点搜查小偷,求在2015小时内能抓住小偷的方案. 分析:首先每次扫过一列即i1 i2从左往右扫,这样会漏掉小偷正好从间隙穿过的 ...

  4. dubbo中Hessian方法重载问题处理

    dubbo中Hessian方法重载,报出如下错误信息: 十一月 , :: 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Ser ...

  5. configure: error: MySQL library not found

    在CentOS系统中,安装zabbix进行configure时会遇到以下问题 ./configure --enable-server --enable-agent --with-mysql --wit ...

  6. 千万千万不要运行的 Linux 命令

    文中列出的命令绝对不可以运行,即使你觉得很好奇也不行,除非你是在虚拟机上运行(出现问题你可以还原),因为它们会实实在在的破坏你的系统.所以不在root等高级管理权限下执行命令是很好的习惯. 早晚有一天 ...

  7. NSMutableDictionary 排序问题

    NSMutableDictionary 默认情况下是按字母的顺序进行排序的 (a-z)的默认排序如何自定义排序呢? 第一种,利用数组的sortedArrayUsingComparator调用 NSCo ...

  8. leetcode_935. Knight Dialer_动态规划_矩阵快速幂

    https://leetcode.com/problems/knight-dialer/ 在如下图的拨号键盘上,初始在键盘中任意位置,按照国际象棋中骑士(中国象棋中马)的走法走N-1步,能拨出多少种不 ...

  9. Android(java)学习笔记166:上下文的区分

    1.两种上下文:  (1)Activity.this                               界面的上下文 (2)getApplicationContext()         整 ...

  10. 简洁的KVO -- 使用Block响应事件

    涉及内容: KVO,Runtime,Category,Block 首先创建NSObject的Category 举个例子是这样的: 随后定义你需要响应的Block结构 我简单一点就这样咯 typedef ...