美文网首页
Python学习之copy and deepcopy

Python学习之copy and deepcopy

作者: brave_wu | 来源:发表于2018-06-09 19:06 被阅读0次

赋值操作

我们先来看两个内容相同的对象:

lst3 = list(range(4))
lst4 = list(range(4))
print('两个对象的哈希')
print(hash(id(lst3)))
print(hash(id(lst4)))
print('他们是否=')
print(lst3==lst4)
print('他们是否is')
print(lst3 is lst4)

结果是:

两个对象的哈希
4377943688
4377942472
他们是否=
True
他们是否is
False

然后我们使用赋值操作:

lst1 = lst3
print('1 是否is 3')
print(lst1 is lst3)
print('两个对象的哈希')
print(hash(id(lst1)))
print(hash(id(lst3)))
print('修改1后')
lst1[2] = 99
print('1和3的内容:')
print(lst1)
print(lst3)
print('1 是否is 3')
print(lst1 is lst3)

结果:

1 是否is 3
True
两个对象的哈希
4377943688
4377943688
修改1后
1和3的内容:
[0, 1, 99, 3]
[0, 1, 99, 3]
1 是否is 3
True

结果表明只有哈希值相同的对象才是is

浅拷贝

我们把上面打印操作封装成一个函数isequel,比较一下浅拷贝对象前后:

lst3 = [1,[10,20],3]
print('浅拷贝')
lst4 = lst3.copy()
isequel(lst3,lst4)
print('修改3的元素后')
lst3[1][1] = 200
print('lst3=')
print(lst4)
print('lst4=')
print(lst4)
isequel(lst3,lst4)

结果:

浅拷贝
两个对象的哈希
4382428360
4382428104
他们是否=
True
他们是否is
False
修改3的元素后
lst3=
[1, [10, 200], 3]
lst4=
[1, [10, 200], 3]
两个对象的哈希
4382428360
4382428104
他们是否=
True
他们是否is
False

浅拷贝后两个对象不是is的,当修改子元素中的元素后,跟随改变,说明只是复制了地址而已

深拷贝

需要引入copy库

print('深拷贝 import copy')
lst4 = copy.deepcopy(lst3)
isequel(lst3,lst4)
print('修改3的元素后')
lst3[1][1] = 300
print('lst3=')
print(lst3)
print('lst4=')
print(lst4)
isequel(lst3,lst4)

结果

深拷贝 import copy
两个对象的哈希
4515200136
4510722440
他们是否=
True
他们是否is
False
修改3的元素后
lst3=
[1, [10, 300], 3]
lst4=
[1, [10, 200], 3]
两个对象的哈希
4515200136
4510722440
他们是否=
False
他们是否is
False

深拷贝其实是拷贝了对象的整个结构并另外创建一个新的,所以你改变对我没有影响.

=是深拷贝还是浅拷贝

print('=操作:')
lst5 = lst4
isequel(lst4,lst5)
lst4[1][1] = 400
print('lst4=')
print(lst4)
print('lst5=')
print(lst5)
isequel(lst5,lst4)

结果

=操作:
两个对象的哈希
4390140616
4390140616
他们是否=
True
他们是否is
True
lst4=
[1, [10, 400], 3]
lst5=
[1, [10, 400], 3]
两个对象的哈希
4390140616
4390140616
他们是否=
True
他们是否is
True

结果证明''=''是浅拷贝.

相关文章

  • Python学习之copy and deepcopy

    赋值操作 我们先来看两个内容相同的对象: 结果是: 然后我们使用赋值操作: 结果: 结果表明只有哈希值相同的对象才...

  • 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 and deepcopy

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