1. 程式人生 > >python學習之第十五課時--存址方式及拷貝

python學習之第十五課時--存址方式及拷貝

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學習之第十五課時--存址方式及拷貝