1. 程式人生 > >python基礎-深拷貝、淺拷貝

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>