python直接赋值、深浅拷贝实例剖析
根据数据类型分为两部分进行剖析:
- 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直接赋值、深浅拷贝实例剖析的更多相关文章
- 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝
Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...
- Python 中的深浅拷贝
Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...
- 第五篇python进阶之深浅拷贝
目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...
- python 赋值 深浅拷贝
深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...
- 人生苦短之我用Python篇(深浅拷贝、常用模块、内置函数)
深浅拷贝 有时候,尤其是当你在处理可变对象时,你可能想要复制一个对象,然后对其做出一些改变而不希望影响原来的对象.这就是Python的copy所发挥作用的地方. 定义了当对你的类的实例调用copy.c ...
- Python中的深浅拷贝
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...
- python基础(6)-深浅拷贝
赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...
- Python基础【3】:Python中的深浅拷贝解析
深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...
- 挖一挖python中的深浅拷贝问题
前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...
随机推荐
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- 用jQuery获取到一个类名获取到的是一个数组 ,如果对数组中的每个进行相应的操作可以这样进行
$(".userImg").each(function(){ $(this).click(function(){ var imgid = $(this).attr("id ...
- _bzoj1257 [CQOI2007]余数之和sum【小技巧】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1257 最近刚做了一道莫比乌斯的题,需要用到这种方法. 应该让k / i相等的一连串k % i ...
- POJ3417(树上差分)
会卡vector. ; int n, m, Ans; ], to[maxn * ], tot; int vis[maxn], f[maxn]; int d[maxn], sum[maxn]; vect ...
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D
Description A tree is an undirected connected graph without cycles. The distance between two vertice ...
- forward和sendRedirect的区别
部分内容转自:http://blog.csdn.net/zhouysh/article/details/380364和http://blog.csdn.net/frank_jay/article/de ...
- python函数基础(3)
第1章 编码补充 1.1 字符编码对照表 1.2 编码特性 1.4 encode/decode第2章 集合 2.1 特点 2.2 [重点]作用:去重 2.3 常用操作 2.3.1 删除 2.3.2 交 ...
- C#基础学习3
运算符,表达式!
- jQuery在$(function(){})中調用函數
任務太緊,很少記筆記,記下一篇jQuery中調用函數的例子: 該方法是在載入頁面的時候,判斷 ModelName 不為空,則獲取Model信息加載到Table中: 另外,在點擊半成品編號文本框時,也調 ...
- Redis学习笔记1-安装配置
一.Redis安装 Redis官网:http://www.redis.io/download 注意:版本号2.4,2.6,2.8等偶数结尾为稳定版,2.5等为非稳定版本,生成环境应该使用稳定版 下载解 ...