python3筆記十四:python可變與不可變數據類型+深淺拷貝


一:學習內容

  • python3中六種數據類型
  • python賦值
  • python淺拷貝
  • python深拷貝

 

二:python3六種數據類型

1.六種數據類型

  • Number(數字)
  • string(字符串)
  • List(列表)
  • Tuple(元祖)
  • Set(集合)
  • Dictionary(字典)

 

2.六種數據類型分類

  • 不可變數據(3個):Number、String、Tuple
  • 可變數據(3個):List、Dictionary、Set

 

3.六種類型總結

  • Number(數字):支持 int(整形)、float(浮點型)、bool(布爾型)、complex(復數).  只有一個整數類型int,表示為長整型;沒有python2中的long。
  • String(字符串):字符串使用雙引號或是單引號括起來,同時使用反斜杠轉義特殊字符;索引以0為開始值,-1為從末尾的開始位置。
  • List(列表):列表寫在 [] 之間,元素之間用逗號隔開;索引以0為開始值,-1為從末尾的開始位置;列表元素類型可以不同,由數字、字符串、列表(所謂的嵌套)組成;有序的對象集合。
  • Tuple(元組):元組寫在()之間,元素之間用逗號隔開;元組元素類型可以不同,由數字、字符串、元組等組成;元組的元素不可變,但是可以包含可變的對象,比如list列表;有序的對象集合;構造一個元素的元組,需要在元素后面加上逗號。
  • Dictionary(字典):字典寫在{}之間,由鍵(key):值(value)對集合組成,元素之間用逗號隔開;字典中的元素通過鍵來存取,而不是通過偏移存取;鍵key必須使用不可變類型,同一個字典中,鍵必須是唯一的;創建空字典使用 {}。
  • Set(集合):集合寫在{}之間,基本功能是進行成員關系測試和刪除重復元素;可使用大括號 {}或者set()函數創建集合;創建一個空集合必須是set(),{}代表的是空字典。

 

三:python賦值

1.賦值(=):數據完全共享

賦值是在內存中指向同一個對象:

如果是可變(mutable)類型,比如列表、字典、集合,修改其中一個,另一個必定改變

如果是不可變類型(immutable),比如數字、字符串、元組,修改了其中一個,另一個並不會變

 

2.舉例說明--可變類型賦值:列表、字典、集合

====s1是可變類型列表,s1賦值給s2,然后修改s1,s2就會跟着改變

s1 = [1,2,3]
s2 = s1
s1.append(4)
s1
s2

 

====s3是可變類型字典,s3賦值給s4,然后修改s3,s4就會跟着改變

s3= {"name":"tester"}
s4 = s3
s3["age"] = 18
s3
s4

 

====s5是可變類型集合,s5賦值給s6,然后修改s5,s6就會跟着改變

s5= set([1,2,3,4])
s6 = s5
s5.add(5)
s5
s6

 

3.舉例說明--不可變類型賦值:數字、字符串、元組

====s1是不可變類型數字,s1賦值給s2,然后修改s1,s2不會跟着改變

s1 = 10
s2 = s1
s1=12
s1
s2

 

====s3是不可變類型字符串,s3賦值給s4,然后修改s3,s4不會跟着改變

s3 = "testing"
s4 = s3
s3=  "tesing testing"
s3
s4

 

====s5是不可變類型元組,s5賦值給s6,然后修改s5,s6不會跟着改變

s5 = (1,2,3)
s6 = s5
s5=  (1,2,3,4)
s5
s6

 

四:python淺拷貝

1.淺拷貝:數據半共享(拷貝第一層的數據,具有自己單獨的內存地址;嵌套層即第二層或其他層不拷貝,指向原有的內存地址)

 

2.原則

只復制一層,他變我不變;其余層,他變我也變。
如果只有一層,就相當於深拷貝了

 

3.方法-三種

第一種:a = b[:]
第二種:a = b.copy()
第三種:引用copy模塊,import copy  |  a = copy.copy(b)

 

4.舉例--淺拷貝

s1 = [1,2,3,[4,5,6]]
#淺拷貝
s2 = s1[:]

#s1第一層改變,s2不會跟着改變
s1[2] = 55
s1
s2

 

#s1第二層即嵌套層改變,s2也跟着改變
s1[3][0] = 66
s1
s2

 

圖解上述過程:

s2在內存中已經獨立出s1第一層的數據,第二層的數據並沒有拷貝成功,而是指向了s1中的第二層數據的內存地址

所以就會有:

s1中第一層數據發生變化,s2中第一層數據不跟着改變

s1中第二層數據發生變化,s2中第二層數據也發生變化

 

五:python深拷貝

1.深拷貝:數據完全不共享(復制其數據完完全全放獨立的一個內存,完全拷貝,數據不共享)

 

2.原則

他變我也變。

3.方法

引用copy模塊,import copy  |  a = copy.deepcopy(b)

 

4.舉例--深拷貝

import copy

s1 = [1,2,3,[4,5,6]]
#深拷貝
s2 = copy.deepcopy(s1)

#s1第一層改變,s2不會跟着改變
s1[2] = 55
s1
s2

#s1第二層即嵌套層改變,s2也不會跟着改變
s1[3][0] = 66
s1
s2

 

圖解上述過程:

s2在內存中已經獨立出s1的數據

所以就會有:

s1中第一層數據發生變化,s2中第一層數據不跟着改變

s1中第二層數據發生變化,s2中第一層數據也不跟着改變


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM