欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python基础-深拷贝、浅拷贝

程序员文章站 2022-05-28 19:39:34
...

一、“==”和 is

python基础-深拷贝、浅拷贝

  • “==”是比较两个对象是否相等,而不管是不是指向同一个地址
  • is 是指不仅对象相等,而且指向的内存地址也相等。。(小整数对象池除外)

二、浅拷贝和深拷贝

  • 浅拷贝:a = [1, 2, 3] b = a 拷贝后id(a)和id(b)相等。
  • 深拷贝:拷贝的内容相同,地址不用。
 import copy
 c = copy.deepcopy(a) 
  • 1
  • 2
  • 在深拷贝嵌套列表的时候,列表和嵌套的列表都进行了拷贝。
    而用copy.copy的时候,只是深拷贝了外层列表,并内有对嵌套
    列表进行深拷贝。。。
import copy
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
d = copy.deepcopy(c)
# id(d) != id(c)
print(id(d))
print(id(c))
# 内嵌列表的地址也不相等。
print(id(d[0]))
print(id(a))

e = copy.copy(c)
# 外层列表地址不一样
print(id(e))
print(id(c))
# 内嵌列表地址一样
print(id(a))
print(id(e[0]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • copy.copy()
    对于可变数据类型只拷贝一层,对于不可变数据类型,不拷贝,直接饮用(地址一样)

  • copy.deepcopy()
    盖头换面,里里外外都改变。(地址不一样)

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
相关标签: 深拷贝浅拷贝