美文网首页python与Tensorflow
Python——入门级(copy & deepcopy

Python——入门级(copy & deepcopy

作者: SpareNoEfforts | 来源:发表于2018-09-02 16:08 被阅读6次

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。

id

什么是id?一个对象的id值在CPython解释器里就代表它在内存中的`地址'

>>> import copy
>>> a=[1,2,3]
>>> b=a
>>> id(a)
"""
4382960392
"""
>>> id(b)
"""
4382960392
"""
>>> id(a)==id(b)    #附值后,两者的id相同,为true。
True
>>> b[0]=222222  #此时,改变b的第一个值,也会导致a值改变。
>>> print(a,b)
[222222, 2, 3] [222222, 2, 3] #a,b值同时改变

浅拷贝

当使用浅拷贝时,python只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。看代码:

>>> import copy
>>> a=[1,2,3]
>>> c=copy.copy(a)  #拷贝了a的外围对象本身,
>>> id(c)
4383658568
>>> print(id(a)==id(c))  #id 改变 为false
False
>>> c[1]=22222   #此时,我去改变c的第二个值时,a不会被改变。
>>> print(a,c)
[1, 2, 3] [1, 22222, 3] #a值不变,c的第二个值变了,这就是copy和‘==’的不同

深拷贝

deepcopy对外围和内部元素都进行了拷贝对象本身,而不是对象的引用。

#copy.copy()

>>> a=[1,2,[3,4]]  #第三个值为列表[3,4],即内部元素
>>> d=copy.copy(a) #浅拷贝a中的[3,4]内部元素的引用,非内部元素对象的本身
>>> id(a)==id(d)
False
>>> id(a[2])==id(d[2])
True
>>> a[2][0]=3333  #改变a中内部原属列表中的第一个值
>>> d             #这时d中的列表元素也会被改变
[1, 2, [3333, 4]]


#copy.deepcopy()

>>> e=copy.deepcopy(a) #e为深拷贝了a
>>> a[2][0]=333 #改变a中内部元素列表第一个的值
>>> e
[1, 2, [3333, 4]] #因为时深拷贝,这时e中内部元素[]列表的值不会因为a中的值改变而改变
>>>

相关文章

  • Python——入门级(copy & deepcopy

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。 id ...

  • Python浅拷贝与深拷贝

    Python浅拷贝与深拷贝 讨论import copy中copy.copy与copy.deepcopy区别。 根据...

  • copy deepcopy

    http://wecatch.me/blog/2016/06/18/python-copy-deepcopy/

  • python copy deepcopy

    python的存储方式 变量a中并不是保存的1的值,而是指向1的值的索引(reference),以下两个例子可以看...

  • 每周一个 Python 模块 | copy

    专栏地址:每周一个 Python 模块 copy 模块包括两个功能,copy() 和 deepcopy(),用于复...

  • python

    python传值Python 函数参数引用(传值/传址)/copy/deepcopy - ZH奶酪 - 博客园 p...

  • python 浅拷贝copy和深拷贝deepcopy

    python copy(浅拷贝)和deepcopy(深拷贝) copy:只拷贝最外层数据,不拷贝里面的子层数据,即...

  • Python深浅拷贝

    预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是...

  • python中copy和deepcopy有什么区别?

    python中copy和deepcopy有什么区别? copy仅拷贝对象本身,而不对中的子对象进行拷贝,故对子对象...

  • 11.python深浅拷贝

    python为拷贝提供了copy模块。提供了两种主要的copy方法,一种是普通的copy,另一种是deepcopy...

网友评论

    本文标题:Python——入门级(copy & deepcopy

    本文链接:https://www.haomeiwen.com/subject/ewemwftx.html