第二十三節,不一樣數據類型在內存中的存址方式,及深淺拷貝

不一樣數據類型在內存中的存址方式python

字符串str,一次性建立,不能被修改,只要有修改字符串,就是在從新建立新的字符串
Python底層是c語言寫的,c語言沒有字符串的說法,字符串是字符數組,因此在內存址是字符數組的方式數組

 

列表list優化

 

copy.copy()淺拷貝:只拷貝第一層,下面的指向的原始地址spa

copy.deepcopy()深拷貝:除底層的字符串或數字外,其餘的上層都拷貝,底層的字符串或數字仍是指向的原始地址3d

注意:在使用拷貝時,必須先引入拷貝模塊 import copycode

 

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)

相關文章
相關標籤/搜索