Python3中copy模組常用功能及其他幾種copy方式比較
1、簡單的共享引用:
python中內建有小整數常量池和字串常量池,在某個範圍內的相同的數字或字串分別賦給不同的變數,這些不同的變數都是指向同一塊記憶體地址,這就是所謂的共享引用,舉幾個簡單的例子:
單純的變數的傳遞其實也是一種共享引用:
2、字典的copy()方法
字典的copy()方法相當於一種深複製,即將原本的字典dic1複製出一個內容一模一樣的字典給另一個字典變數dic2,dic1和dic2的內容完全相同,但記憶體地址不同,不是共享引用,其中任何一方做出改變,另外一方不受影響,舉個例子:
3、copy模組的兩種copy方法:copy.copy()和copy.deepcopy()
首先匯入copy模組,import copy
copy.copy()方法:複製模式跟copy()中引數的型別有關,只能copy最外層(有巢狀時),引數的型別包括可變型別和不可變型別
1、可變型別:當引數是可變型別時,該方法最外層執行的是深度複製,即複製前後的兩個變數地址不同,如果原變數中巢狀有可變型別的元素,那麼,內層進行的是淺複製,一方改變,另一方會受影響。(即兩個變數地址不同,但指向同一塊記憶體區域)
2、不可變型別:當copy()中的引數是不可變型別時,最外層執行淺複製(即兩個變數地址相同且指向同一塊記憶體區域),內層也執行淺複製
copy.deepcopy():不管引數是否為可變型別,遞迴地執行深度複製,如果變數中巢狀可變或不可變的變數,在複製時不管內層還是外層均執行深度複製(有一種情況除外),即另外開闢一塊記憶體空間,把原變數所有的內容都複製一份過來,賦給新的變數,兩變數雖然內容相同,但地址不同,且分別指向不同的區域,任意一方內容做出改變,另一方不會受到影響。
注意:
在使用copy.deepcopy()方法時,如果引數為不可變型別,且裡面巢狀的物件也是不可變型別,則此方法複製的結果為淺複製(即地址相同)。
相關文章
- Java Bean Copy元件的效能比較JavaBean元件
- Javascript中的幾種繼承方式比較JavaScript繼承
- Copy of a Copy of a Copy
- 幾種常用資料庫比較資料庫
- java集合遍歷的幾種方式總結及比較Java
- SQLPLUS COPY 功能。SQL
- ORACLE的Copy命令和create table,insert into的比較Oracle
- Java幾種常用JSON庫效能比較JavaJSON
- copy檔案到其他的路徑
- Html中引用其他html頁面的幾種方式HTML
- 在tmux中copyUX
- JS嵌入html的方式及各種方式的比較JSHTML
- Java中陣列判斷元素存在幾種方式比較詳解Java陣列
- python中的複製copy模組怎麼使用?Python
- 幾種遠端呼叫方式,大家感覺哪種比較好?
- 幾種排序的比較排序
- Java----【實現copy的功能】Java
- SQL中copy命令使用SQL
- js中建立物件的幾種常用方式JS物件
- 每週一個 Python 模組 | copyPython
- java中四種操作xml方式的比較JavaXML
- Python模組學習:copy 物件拷貝Python物件
- PostgreSQL:COPYSQL
- Rust中的Copy和CloneRust
- Objective-C中的CopyObject
- oracle中copy from的用法Oracle
- Oracle中的redo copy latchOracle
- Cesium 比較常用的幾個方法
- Java中幾個常用併發佇列比較 | BaeldungJava佇列
- 區分copy構造與copy賦值賦值
- COPY語法
- informix SQLCA [COPY]ORMSQL
- remote client copyREMclient
- Copy client scheduleclient
- Java中的幾種Kafka客戶端比較介紹JavaKafka客戶端
- IOS基礎:retain,copy,assign及autoreleaseiOSAI
- 分割陣列的幾種方法比較陣列
- 【MyBatis】幾種批量插入效率的比較MyBatis