Python (深淺拷貝)

1、深拷貝  –>  克隆一份,修改拷貝後的內容不對原對象內容產生影響

  • 拷貝後修改序列中元素內容,注意:被修改的元素不能為一個序列中的某個值
a  = [["北京多測師","成都多測師"],"上海多測師","深圳多測師","廣州多測師"]
b = a.copy()
b[1] = "天津多測師"
print(a)
print(b)

# 結果如下
[['北京多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']   # 列表 a 中的 "上海多測師" 未修改為 "天津多測師"
[['北京多測師', '成都多測師'], '天津多測師', '深圳多測師', '廣州多測師']   # 列表 b 中的 "上海多測師" 修改為 "天津多測師"
  • copy 模組中的 deepcopy()
import copy

a  = [["北京多測師","成都多測師"],"上海多測師","深圳多測師","廣州多測師"]
b = copy.deepcopy(a)
b[0][0] = "天津多測師"
print(a)
print(b)

# 結果如下
[['北京多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']    # 原列表 a 未發生改變
[['天津多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']    # 列表 b 中的第一個元素中的 "北京多測師" 修改為 "天津多測師"

2、淺拷貝  –>  修改拷貝後的內容原對象內容隨之修改

a  = [["北京多測師","成都多測師"],"上海多測師","深圳多測師","廣州多測師"]
b = a.copy()
b[0][0] = "天津多測師"
print(a)
print(b)

# 結果如下
[['天津多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']
[['天津多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']   # 列表 a 和 b 中的 "北京多測師" 都修改為 "天津多測師"
  • copy 模組中的 copy()
import copy

a  = [["北京多測師","成都多測師"],"上海多測師","深圳多測師","廣州多測師"]
b = copy.copy(a)
b[0][0] = "天津多測師"
print(a)
print(b)

# 結果如下
[['天津多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']
[['天津多測師', '成都多測師'], '上海多測師', '深圳多測師', '廣州多測師']    # 列表 a 和 b 中的 "北京多測師" 都修改為 "天津多測師"