python deepcopy浪费时间_Python copy(), deepcopy()
直接赋值
赋值是 b = a:赋值引用,a 和 b 都指向同一个对象,内存地址相同,即a is b。
赋值不是浅拷贝。
>>> a = [1, 2, 3]>>> b =a>>>id(a), id(b)
(140579276041800, 140579276041800)>>>a, b
([1, 2, 3], [1, 2, 3])>>> a ==b
True>>> a isb
True>>> a.append(4)>>>a, b
([1, 2, 3, 4], [1, 2, 3, 4])
copy() 浅拷贝:
创建一组拷贝对象的引用。(浅拷贝会创建一个新对象,新对象和原对象指向同一内存地址,但新对象和原对象本身内存地址不同,即值相等,内存地址不等。例:b = copy.copy(a),a==b,但a is not b)
如果原对象的可变对象改变(list),那么新对象随之改变,
如果原对象某位置的不可变对象被替换成其他值, 那么新对象将仍然用原对象的原引用值,不随之改变。
也就是说,因为浅拷贝是拷贝对象的引用,可变对象会随着原对象的改变而改变,不可变对象不变。
PS:切片操作是浅拷贝,会生成一个新的对象( id(新对象) != id(原对象) ),新的对象里保存原对象的引用。
例如:
>>> import copy
>>> l
[100, 2, 3, [2, 3, 4]]
>>> l2 = copy.copy(l)
>>> l2
[100, 2, 3, [2, 3, 4]]
>>> l[0]=-1
>>> l
[-1, 2, 3, [2, 3, 4]]
>>> l2
[100, 2, 3, [2, 3, 4]]
>>> l[-1].append(10000)
>>> l
[-1, 2, 3, [2, 3, 4, 10000]]
>>> l2
[100, 2, 3, [2, 3, 4, 10000]]
>>> a = [1,2,3]
>>> id(a)
47973832L
>>> id(a[0])
41902968L
>>> a[0]=5
>>> id(a[0])
41902872L
>>> id(a)
47973832L
>>> a
[5, 2, 3]
>>> c = a[:]
>>> id(c[0])
41902872L
>>> id(a[0])
41902872L
>>> id(a[1])
41902944L
>>> id(c[1])
41902944L
>>> id(c[2])
41902920L
>>> id(a[2])
41902920L
>>> a.append(100)
>>> a
[5, 2, 3, 100]
>>> c
[5, 2, 3]
>>> a[0] = -1
>>> id(a[0])
41903016L
>>> id(c[0]) # a改变了,c仍然引用原对象
41902872L
deepcopy() 深拷贝:
对于原对象,不可变类型使用对象引用,可变类型直接复制一份。无论原对象如何改变,深拷贝出来的对象都不变。
>>> l3 = [1,2,3,"abc",[20,30,40]]
>>> l4 = copy.deepcopy(l3)
>>> l4
[1, 2, 3, 'abc', [20, 30, 40]]
>>> l3[0] = 0
>>> l3
[0, 2, 3, 'abc', [20, 30, 40]]
>>> l4
[1, 2, 3, 'abc', [20, 30, 40]]
>>> l3[-1].append(50)
>>> l3
[0, 2, 3, 'abc', [20, 30, 40, 50]]
>>> l4
[1, 2, 3, 'abc', [20, 30, 40]]
python deepcopy浪费时间_Python copy(), deepcopy()相关推荐
- python deepcopy浪费时间_python – deepcopy()非常慢
实际上,深度扫描非常慢.但我们可以使用json,ujson或cPickle. 我们可以使用json / cPickle来转储对象,并在以后加载它. 这是我的测试: Total time: 3.4606 ...
- python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError...
我想实现一个符号类型,它跟踪我们已经拥有的符号(保存在_sym_table中),如果它们存在则返回它们,否则创建新符号.代码: # -*- coding: utf-8 -*- _sym_table = ...
- Python 传值和传址 copy/deepcopy
传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...
- python获取网络时间_python获取网络时间和本地时间
今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间获取网络时间 def getBeijinTime(): ""&qu ...
- python将excel时间_Python学习笔记(一)Python时间戳与Excel的日期
今天遇到一个比较实际的问题,从库存报表里面识别出最长库龄的零件,并计算出库龄. 思路很简单,将当前日期减去表格日期,得到库龄.找到max库龄就ok了. 以2行的日期为例,先print日期 d1 = s ...
- python如何显示时间_python显示当前时间
Python中怎么显示当前时间 用Python3编写一个程序显示当前北京时间,要CSS布局HTML小编今天和大家分享显示格式如下: 当前时间import timeprint(time.strftime ...
- python 转换文件时间_python时间转换
http://edu.codepub.com/2010/0725/24551.php 1)秒数 ==>字符串 2)字符串 ==> 秒数 完整的函数: Python的time模块的部分翻译: ...
- python requests超时时间_python - requests 库 使用过程中timeout值最大可设值?
问 题 请问 requests 库 使用过程中timeout错误的默认时间是多长呢? 查看源码 理论上 timeout值可以任意设? 默认 timeout 值 是怎么来的呢? 如果我想设一个比较大的t ...
- python怎么获取时间_Python:如何从datetime.timedelta对象中获取时间?
在我看来,MySQL中的TIME类型旨在表示时间间隔,就像Python中的datetime.timedelta那样.从您引用的文档中:TIME values may range from '-838: ...
最新文章
- python读取txt文件-python txt文件的写入和读取
- 非支配排序遗传算法2(NSGA-II)
- vue点击改变data_vue实现响应式原理即vue如何监听data的每个属性的变化
- 如何正确使用Python临时文件
- Django 笔记3 -- URL
- gflags调试访问越界
- 信息时代计算机应用技术,计算机应用技术
- Chrome Console Cookie 控制台操作命令
- 交错字符串Python解法
- Oh-My-Zsh 中安装 NVM
- floyd算法求最短路径_算法题-蜜蜂采蜜最短路径
- R语言建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、predict函数对cox模型进行新数据的预测、计算不同样本的风险比HR(hazard ratio)
- 安卓电子书格式_纯干货|提升电子书阅读体验的四点感受
- 微信小程序开发视频加载:[渲染层网络层错误] Failed to load media
- 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路
- snipaste 方便快捷截图工具
- 人工智能之经典逻辑推理
- 重装操作系统的20条原则
- Java与数据库中的datetime Timestamp以及String之间的转换
- 来淄博旅游 2055