python學習之第十五課時--存址方式及拷貝
阿新 • • 發佈:2017-11-05
pre env 就是 宋體 spa 基本數據類型 -1 數字 ron
不同數據類型在內存中的存址方式
字符串str,一次性創建,不能被修改,只要有修改字符串,就是在重新創建新的字符串
Python底層是c語言寫的,c語言沒有字符串的說法,字符串是字符數組,所以在內存址是字符數組的方式
圖示:
列表list
圖示:
copy.copy()淺拷貝:只拷貝第一層,下面的指向的原始地址
copy.deepcopy()深拷貝:除底層的字符串或數字外,其他的上層都拷貝,底層的字符串或數字還是指向的原始地址
註意:在使用拷貝時,必須先引入拷貝模塊 import copy
一、數字和字符串
對於 數字 和 字符串 而言,賦值、淺拷貝和深拷貝無意義,因為其永遠指向同一個內存地址
#!/usr/bin/env python # -*- coding:utf-8 -*- import copy a=12 b=a print(id(b)) #打印 36593664 #淺拷貝 b=copy.copy(a) #深拷貝 c=copy.deepcopy(a) print(id(c)) #打印 36593664
深拷貝
c= copy.deepcopy(a)
#!/usr/bin/env python # -*- coding:utf-8 -*- import copy a=12 b=a print(id(b)) #打印 36593664 #淺拷貝 b=copy.copy(a)#深拷貝 c=copy.deepcopy(a) print(id(c)) #打印 36593664
二、其他基本數據類型
對於字典、元祖、列表 而言,進行賦值、淺拷貝和深拷貝時,其內存地址的變化是不同的
1、賦值
賦值,只是創建一個變量,該變量指向原來內存地址,如:
#!/usr/bin/env python # -*- coding:utf-8 -*- import copy b={"zhang":12,"li":34,"wu":[57,22]} a=b
圖示:
2、淺拷貝
淺拷貝,在內存中只額外創建第一層數據
#!/usr/bin/env python # -*- coding:utf-8 -*-import copy b={"zhang":12,"li":34,"wu":[57,22]} a=b a=copy.copy(b)
圖示:
3、深拷貝
深拷貝,在內存中將所有的數據重新創建一份(排除最後一層,即:python內部對字符串和數字的優化)
#!/usr/bin/env python # -*- coding:utf-8 -*- import copy b={"zhang":12,"li":34,"wu":[57,22]} c=copy.deepcopy(b)
圖示:
python學習之第十五課時--存址方式及拷貝