直接赋值

赋值是 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()相关推荐

  1. python deepcopy浪费时间_python – deepcopy()非常慢

    实际上,深度扫描非常慢.但我们可以使用json,ujson或cPickle. 我们可以使用json / cPickle来转储对象,并在以后加载它. 这是我的测试: Total time: 3.4606 ...

  2. python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError...

    我想实现一个符号类型,它跟踪我们已经拥有的符号(保存在_sym_table中),如果它们存在则返回它们,否则创建新符号.代码: # -*- coding: utf-8 -*- _sym_table = ...

  3. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  4. python获取网络时间_python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间获取网络时间 def getBeijinTime(): ""&qu ...

  5. python将excel时间_Python学习笔记(一)Python时间戳与Excel的日期

    今天遇到一个比较实际的问题,从库存报表里面识别出最长库龄的零件,并计算出库龄. 思路很简单,将当前日期减去表格日期,得到库龄.找到max库龄就ok了. 以2行的日期为例,先print日期 d1 = s ...

  6. python如何显示时间_python显示当前时间

    Python中怎么显示当前时间 用Python3编写一个程序显示当前北京时间,要CSS布局HTML小编今天和大家分享显示格式如下: 当前时间import timeprint(time.strftime ...

  7. python 转换文件时间_python时间转换

    http://edu.codepub.com/2010/0725/24551.php 1)秒数 ==>字符串 2)字符串 ==> 秒数 完整的函数: Python的time模块的部分翻译: ...

  8. python requests超时时间_python - requests 库 使用过程中timeout值最大可设值?

    问 题 请问 requests 库 使用过程中timeout错误的默认时间是多长呢? 查看源码 理论上 timeout值可以任意设? 默认 timeout 值 是怎么来的呢? 如果我想设一个比较大的t ...

  9. python怎么获取时间_Python:如何从datetime.timedelta对象中获取时间?

    在我看来,MySQL中的TIME类型旨在表示时间间隔,就像Python中的datetime.timedelta那样.从您引用的文档中:TIME values may range from '-838: ...

最新文章

  1. python读取txt文件-python txt文件的写入和读取
  2. 非支配排序遗传算法2(NSGA-II)
  3. vue点击改变data_vue实现响应式原理即vue如何监听data的每个属性的变化
  4. 如何正确使用Python临时文件
  5. Django 笔记3 -- URL
  6. gflags调试访问越界
  7. 信息时代计算机应用技术,计算机应用技术
  8. Chrome Console Cookie 控制台操作命令
  9. 交错字符串Python解法
  10. Oh-My-Zsh 中安装 NVM
  11. floyd算法求最短路径_算法题-蜜蜂采蜜最短路径
  12. R语言建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、predict函数对cox模型进行新数据的预测、计算不同样本的风险比HR(hazard ratio)
  13. 安卓电子书格式_纯干货|提升电子书阅读体验的四点感受
  14. 微信小程序开发视频加载:[渲染层网络层错误] Failed to load media
  15. 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路
  16. snipaste 方便快捷截图工具
  17. 人工智能之经典逻辑推理
  18. 重装操作系统的20条原则
  19. Java与数据库中的datetime Timestamp以及String之间的转换
  20. 来淄博旅游 2055

热门文章

  1. 使用Fiddler后谷歌浏览器访问https不安全
  2. Linux内存管理宏观篇(七)虚拟内存
  3. 7.Excuse me/thanks|/Help/ask/some/祈使句
  4. 智能手机股票交易方法
  5. MySQL学习笔记整理
  6. ORA-22858问题详解
  7. Origin2021科研绘图神器
  8. Linux挂载磁盘(扩展根目录)
  9. Webp格式图片怎么转JPG?教你几种简单好用的转换方法
  10. pycharm配置pylint/flake8