不一樣數據類型在內存中的存址方式python
字符串str,一次性建立,不能被修改,只要有修改字符串,就是在從新建立新的字符串
Python底層是c語言寫的,c語言沒有字符串的說法,字符串是字符數組,因此在內存址是字符數組的方式數組
列表list優化
copy.copy()淺拷貝:只拷貝第一層,下面的指向的原始地址spa
copy.deepcopy()深拷貝:除底層的字符串或數字外,其餘的上層都拷貝,底層的字符串或數字仍是指向的原始地址3d
注意:在使用拷貝時,必須先引入拷貝模塊 import
copy
code
1、數字和字符串blog
對於 數字 和 字符串 而言,賦值、淺拷貝和深拷貝無心義,由於其永遠指向同一個內存地址。內存
import copy # ######### 數字、字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 賦值 ## n2 = n1 print(id(n2)) # ## 淺拷貝 ## n2 = copy.copy(n1) print(id(n2)) # ## 深拷貝 ## n3 = copy.deepcopy(n1) print(id(n3))
2、其餘基本數據類型utf-8
對於字典、元祖、列表 而言,進行賦值、淺拷貝和深拷貝時,其內存地址的變化是不一樣的。字符串
一、賦值
賦值,只是建立一個變量,該變量指向原來內存地址,如:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} 4 n2 = n1
二、淺拷貝
淺拷貝,在內存中只額外建立第一層數據
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import copy 4 n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} 5 n3 = copy.copy(n1)
三、深拷貝
深拷貝,在內存中將全部的數據從新建立一份(排除最後一層,即:python內部對字符串和數字的優化)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import copy 4 n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} 5 n4 = copy.deepcopy(n1)