[随笔重写] Python3 的深拷贝与浅拷贝
生活随笔
收集整理的這篇文章主要介紹了
[随笔重写] Python3 的深拷贝与浅拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. Python3 關于深淺拷貝的官方文檔
- 文檔地址:Python3.7.2
- 源碼地址:lib/copy.py
2. 先說結論
- 深拷貝與淺拷貝是對復合對象而言的
- 深拷貝會構造一個新的復合對象,然后遞歸地將在原始對象中所有元素的副本對應地寫入新復合對象中
- 淺拷貝會構造一個新的復合對象,然后(在允許的前提下)向其中寫入對原始對象的引用
3. 開始分析
- 復合對象:包含其他對象的對象,如列表、類實例等
- 模塊、方法、堆棧跟蹤、堆棧幀、文件、套接字、窗口、數組等不能被拷貝
- 示例
>>>
list1_1 = [0, 1, 2, ['a', 'b']]
list1_2 = [0, 1, 2, ['a', 'b']]
list1_3 = [0, 1, 2, ['a', 'b']]
list1_4 = [0, 1, 2, ['a', 'b']]
list1_5 = [0, 1, 2, ['a', 'b']]
----------------------------------------
list1_1' = [0, 1, 2, ['a', 'b', 'c'], 4]
list1_2' = [0, 1, 2, ['a', 'b', 'c'], 4]
list1_3' = [0, 1, 2, ['a', 'b', 'c']]
list1_4' = [0, 1, 2, ['a', 'b', 'c']]
list1_5' = [0, 1, 2, ['a', 'b']]
- 由例1 可看出
- 簡單的賦值只是將引用傳給新對象,新舊對象除變量名外毫無區別
- 原對象中非第一層的可變元素發生變化時,淺拷貝的新對象中的對應元素同步變化
- 深拷貝的新對象是一個真正的副本,不隨原對象的改變而改變
- 補充
- 拷貝后的新對象占用新的空間,但其內部的元素指向原對象內部對應元素的地址
- 原對象中非第一層的不可變元素重新生成時,淺拷貝的新對象中的對應元素保持不變
轉載于:https://www.cnblogs.com/yorkyu/p/10328162.html
總結
以上是生活随笔為你收集整理的[随笔重写] Python3 的深拷贝与浅拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: profile 配置文件修改后如何生效?
- 下一篇: Python——类与对象,异常处理