当前位置:   article > 正文

Python:赋值,浅拷贝和深拷贝区别_python赋值 浅拷贝 深拷区别

python赋值 浅拷贝 深拷区别

一、变量赋值

在Python可变数据类型(列表,字典,集合)中,把一个可变数据类型的变量赋给另一个变量,这两个变量引用的是同一个对象,内存地址是一样的,修改当中的一个变量,另一个变量相应也会被修改

>>> a = [1,2,3,4,5]           
>>> b = a           
>>> id(a)           
2846410718600  # 变量a的内存地址
>>> id(b)           
2846410718600  # 变量b的内存地址
>>> a[0]=0           
>>> a           
[0, 2, 3, 4, 5]
>>> b           
[0, 2, 3, 4, 5]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、浅拷贝

拷贝了一个对象的顶层,只拷贝了对象的"引用"

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> a = [[1,2,3],4,5]           
>>> b = a.copy()
>>> a           
[[1, 2, 3], 4, 5]    
>>> b           
[[1, 2, 3], 4, 5]   
>>> id(a)               # 变量a的内存地址   
2846410784136
>>> id(b)               # 变量b的内存地址
2846410717512
>>> id(a[0])            # 变量a中第一个元素的内存地址
2846410718152
>>> id(b[0])             
2846410718152           # 变量b中第一个元素的内存地址
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

修改对象中的不可变类型数据,另一个变量不受影响;修改对象中的可变类型子数据,另一个变量相应改变

>>> a = [[1,2,3],4,5]           
>>> b = a.copy()           
>>> a[1] = 6   # 修改的为不可变数据类型        
>>> a           
[[1, 2, 3], 6, 5]
>>> b           
[[1, 2, 3], 4, 5]
>>> a[0][1]=0  # 修改的为可变(列表中的数据)数据类型           
>>> a           
[[1, 0, 3], 6, 5]
>>> b           
[[1, 0, 3], 4, 5]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

三、深拷贝

对对象中的每一层都进行了拷贝,拷贝后的对象与原对象为完全独立,没有任何关系。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> from copy import deepcopy           
>>> a = [[1,2,3],4,5]
>>> b = deepcopy(a)           
>>> a           
[[1, 2, 3], 4, 5]
>>> b           
[[1, 2, 3], 4, 5]
>>> id(a)           
2846410715976
>>> id(b)           
2846410515720
>>> id(a[0])           
2846410717896
>>> id(b[0])           
2846410718856
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

即使修改当中一个变量的可变类型子数据,另一个变量也不会受影响

>>> from copy import deepcopy
>>> a = [[1,2,3],4,5]           
>>> b = deepcopy(a)           
>>> a           
[[1, 2, 3], 4, 5]
>>> b           
[[1, 2, 3], 4, 5]
>>> a[0][1]=0           
>>> a           
[[1, 0, 3], 4, 5]
>>> b           
[[1, 2, 3], 4, 5]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/71430
推荐阅读
相关标签
  

闽ICP备14008679号