一:學習內容
- 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中第一層數據也不跟着改變