python基础-深拷贝、浅拷贝

一、“==”和 is

这里写图片描述

  • “==”是比较两个对象是否相等,而不管是不是指向同一个地址
  • 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>

一、“==”和 is

这里写图片描述

  • “==”是比较两个对象是否相等,而不管是不是指向同一个地址
  • 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>

猜你喜欢

转载自blog.csdn.net/myword1314/article/details/81569739