Please enable JavaScript.
Coggle requires JavaScript to display documents.
賦值、淺複製、深複製 可變物件、不可變物件 傳值、傳址 (淺複製與深複製的關鍵差別在於,複製的變數中是否有可變型別…
賦值、淺複製、深複製
可變物件、不可變物件
傳值、傳址
賦值(=)
List
id同,一個值改變不影響另一個
整數
id同,一個值改變會影響另一個
淺複製(copy.copy),參照
僅複製容器中元素的地址
深複製(copy.deepcopy),複製
完全複製了一份副本,容器與容器中的元素地址都不一樣
可變物件
該物件所指向記憶體中的值可以被改變
List、dict、set
不可變物件
該物件所指向記憶體中的值不可以被改變,所以當變數指向的值改變時,等於將原來的值複製一份後存於一個新的地址,變數再指向這個新的地址
String、Tuple、frozenset、
數值型別:int / float / complex
淺複製與深複製的關鍵差別在於,複製的變數中是否有可變型別
淺/深複在製第一層變數均已指向不同記憶體
BUT!!!
淺複製在第二層變數仍與原始變數指向相同記憶體
深複製在第二層變數已指向不同記憶體
深複製 (deep copy) 建立一份完全獨立的變數
函式
其它語言的傳值(call by value)傳址(pass by reference)概念在python是用可變/不可變物件做區分
不可變物件(數值、字串)
使用物件參照時會先複製一份再傳遞
類似傳值
可變物件(串列)
使用物件參照時會直接以記憶體位址做傳遞
類似傳址