補充: == 和 is
== --- 判斷兩個數據的值是否相等
is --- 判斷地址是否相等
python數據存儲:
1.給變量賦值的時候,如果數據的類型是數字或者字符串,不會直接開辟空間存數據,
而是現在數字字符串對應的緩存區里面去查看是否已經存儲過對應的數據。如果已經
存了,直接將之前的數據對應的地址付給變量。如果沒有存儲才會開辟空間存儲數據。
其他類型的數據,都是直接開辟空間存儲數據,然后把地址返回
2.容器類型中的元素,在容器中不是直接存的值,而是元素值對應的地址
一、列表賦值
a.直接使用一個列表變量給另一個列表變量賦值,賦的是地址。
賦完之后,對其中一個列表進行增刪改,會影響另一個
b.如果賦值的時候賦的列表的切片或者拷貝,會產生新的地址,然后使用新的地址賦值。
賦完值之后,兩個列表相互之間不影響。
現象1:
list1 = [1,2,3]
list2 = list1
list2.append(100)
print(list1) #[1,2,3,100]
現象2:
list1 = [1,2,3]
list2 = list1[:]
list2.append(100)
print(list1) #[1,2,3]
二、列表中的方法
1、列表.count(元素) --- 獲取指定元素在列表中出現的次數
2、列表1.extend(序列) --- 將序列中所有的元素都添加到列表中
3、列表.index(元素) --- 獲取指定元素在列表中的下標
注意:a.如果元素有多個,只取第一個的下標
b.如果這個元素不存在,會報錯(ValerError)
4、列表.reverse() ---- 反向列表(將列表元素倒序)
5、列表.sort() ---- 對列表進行升序排序(從小到大)
列表.sort(reverse=True) ---- 對列表進行降序排序(從大到小)
注意:a.列表的元素類型必須一樣? b.元素支持比較運算符
6、列表.clear() --- 清空列表
7、列表.copy() --- 將列表中元素直接復制產生一份新的列表。和列表[:]效果一樣
注意:這的拷貝是淺拷貝
三、淺拷貝和深拷貝
import copy? ? #拷貝模塊
copy.copy(對象) --- 淺拷貝? (直接拷貝元素的值產生一個新的地址)
copy.deepcopy(對象) --- 深拷貝 (不會直接復制地址,而是將地址對應的值拷貝一份產生新的地址)
四、 元組
1.什么是元組(tuple)
元組就是不課表的列表。有序不可變
有序 --? 可以通過下標獲取值元素
不可變 --- 不支持增刪改
2.元組的字面量:通過小括號將多個元素括起來,多個元素之間用逗號隔開。
a.只有一個元素的元組:在元素的后面必須加一個逗號
tuple1 = (元素1,)
b.直接將多個數據用逗號隔開不用括號括起來,還是一個元組值
tuple3 = 1,2,3,4,5,6
c.獲取元組元素
#可以通過變量個數和元組元素個數保持一致來獲取元素中的每一個元素
tuple4 = (10,20)
x,y = tuple4
#通過在變量前加*,獲取沒有*號的變量獲取到的元素的剩余部分。以列表形式返回
tuple5 = ('王',98,99,100,101)
name,*scores = tuple5
print(name,scores)? ? # 王 [98, 99, 100, 101]
#了解一下
tuple1 = (1,2,3)
list1 = ["aa","bb","cc"]
print(*list1)? #aa bb cc
3.獲取元組元素或獲取列表一模一樣
4.相關運算和列表一模一樣
5.元組相關的方法? 只有列表中的count和index
五、字典
1、什么是字典(dict)
字典是python中內置的容器類的數據類型,可變,無序的。字典的元素是鍵值對
2、字典的字面量:使用大括號括起來,大括號中是鍵值對,多個鍵值對用逗號隔開
鍵值對 --- 鍵:對
鍵(key) --- 不可變的;唯一的? 一般使用字符串作為key
值(value) --- 任何數據都可以做為值
dict1 = {'aa':100,10:'abc',(10,20):'hello'}
什么時候使用字典
如果一個容器存儲的數據不同意義數據(數據之間需要區分),就使用字典。
五、字典的增、刪、改、查
1.查 (獲取字典的值)
a. 獲取單個值
字典[key] --- 獲取key對應的值(value)(注意key不存在,會報錯:KeyError)
字典.get[key] --- 獲取key對應的值(value)(注意key不存在,不會報錯,并且會返回一個默認值None)
None是python中的關鍵字,表示一個特殊值(沒有,空的意思)
2.遍歷
直接遍歷字典拿到的是字典中所有的key
例子:for i in dict1:
print(i)
直接遍歷字典拿到的是字典中的鍵值對? (看著方便但性能差,內存消耗多)
例子:for key,value in dict1.items():
print(key,value)
3.增(添加鍵值對)
字典[key] = 值? ? ------? 當key不存在的時候,就是在字典中添加鍵值對
字典1.update(序列) ---- 將序列中的元素轉換成鍵值對,添加到字典1中
注意:在這的序列要求是能夠轉換成字典的序列。序列中的元素是只有兩個元素的小序列
當key值有重名的時候,會用序列中鍵值對對應的值,更新原字典的key對應的值
4.改(修改key對應的值)
字典[key] = 值? --- 當key存在的時候,就是修改key對應的值
5.刪(刪除鍵值對)
a、 del 字典[key]
b、字典.pop[key]? 取出字典中key對應的值(刪除整個鍵值對)
c、刪除最后一個鍵值對(取出最后一個鍵值對,以元組的形式返回)- 無意義
value = 字典.popitem()
print(字典,value)