小數據池---緩存機制(駐留記住)面試
== 判斷兩邊內容是否相等緩存
is
a = 10
b = 10
print(a is b) is判斷基於內存地址app
小數據池的數字範圍:-5~256函數
代碼塊:一個py文件,一個函數,一個類,一個模塊,終端中每一行都是一個代碼塊
支持:
數字:在同一代碼塊下,只要內容相同就採用相同的內存地址(-6以後,∞)
在作乘法的時候範圍 -5~256 *******
在作乘法的時候不能使用浮點數索引
字符串
在同一代碼塊下,只要內容相同就採用相同的內存地址
在乘法的時候總長度不能超過20******
乘法的時候中文,特殊符號乘1或0內存
布爾值
在同一代碼塊下,只要內容相同就採用相同的內存地址rem
小數據池:-5~256規則
數字-5~256*********
字符串:
在同一代碼塊下,只要內容相同就採用相同的內存地址
在乘法的時候總長度不能超過20 **********
乘法的時候,特殊符號乘0
布爾值
在同一代碼塊下,只要內容相同就採用相同的內存地址字符串
小數據池的驗證方法,必須脫離代碼塊才能執行
先執行代碼塊的規則,在執行小數據池的規則(駐留機制)for循環
必會
== 判斷兩邊的值是否相等******
is 判斷兩邊的內存地址是否相等****import
深淺拷貝 複製
面試必問,賦值,淺拷貝,深拷貝
淺拷貝
lst = [1,2,3,[5,6,7]]
lst1 = lst
print(lst)
print(lst1)#地址同樣
import copy
lst = [1,2,3,[5,6,[1,2,3]]]
lst1 = lst.copy()
lst[-1].remove(5)
lst1[-1].append(1)
lst[-1][0] = 10
print(lst)
print(lst1)
淺拷貝,只拷貝第一層
增刪第一層的時候,修改一個,另外一個不變
增刪第二層的時候,修改一個,另外一個變
增刪第N層的時候, 修改一個,另外一個變
修改第一層的時候,修改一個,另外一個不變
修改第二層的時候,修改一個,另外一個變
修改第N層的時候, 修改一個,另外一個變
深拷貝
import copy
lst = [1,2,3,[5,6,[1,2,3]]]
lst1 = copy.deepcopy(lst)
lst[-1][-1].remove(1)
lst[-1][-1].append(10)
lst1[-1][-1][0] = 10
print(lst)
print(lst1)
深拷貝,不可變元素公用,可變元素新開闢一個,
可變元素裏面的值公用。
增刪第一層的時候,修改一個,另外一個不變
增刪第二層的時候,修改一個,另外一個不變
增刪第N層的時候, 修改一個,另外一個不變
修改第一層的時候,修改一個,另外一個不變
修改第二層的時候,修改一個,另外一個不變
修改第N層的時候, 修改一個,另外一個不變
總結:
淺拷貝的時候只拷貝第一層元素
淺拷貝在修改第一層元素(不可變數據類型)的時候,拷貝出來的新列表不進行改變
淺拷貝在替換第一層元素(可變數據類型)的時候,拷貝出來的新列表不進行改變
淺拷貝在修改第一層元素中的元素(第二層)的時候,拷貝出來的新列表進行改變
深拷貝開闢一個容器空間(列表),不可變數據公用,可變數據數據類型(再次開闢一個新的空間)
,空間裏的值是不可變的數據進行共用的,可變的數據類型再次開闢空間
集合 -- set
沒有值得字典 無序 -- 不支持索引
自然去重 *****
定義集合
s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
print(s)
面試題:
lst = [1,2,1,2,4,2,45,3,2,45,2345,]
print(list(set(lst)))
s = {1,2,3,4}
s.add('1') #只能添加一個(字符串,數字,元組)
print(s)
s.update("今天") # 迭代添加
print(s)
刪:
print(s.pop()) # pop有返回值
print(s)
s.remove(3) # 指定元素刪除
print(s)
s.clear() # 清空 -- set() 空集合
print(s)
改:
先刪在加
查:
for i in {1,2,3}:
print(i)
其餘操做:
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,1}
print(s1 & s2) # 交集
print(s1 | s2) # 並集
print(s1 - s2) # 差集
print(s1 ^ s2) # 反交集
print(s1 > s2) # 父集(超集)
print(s1 < s2) # 子集
print(frozenset(s1)) # 凍結集合 更不經常使用
dic = {frozenset(s1):1}
print(dic)
今日總結
1.小數據池:
1.1代碼塊: 一個文件,一個函數,一個類,一個模塊,終端中每一行
1.1.1 數字: -5 ~ 256
1.1.2 字符串: 乘法時總長度不能超過20
1.1.3 布爾值: 內容相同內存地址相同
1.2 小數據池:
1.2.1 數字: -5 ~ 256
1.2.2 字符串: 乘法時總長度不能超過20
1.2.3 布爾值: 內容相同內存地址相同
1.3 先執行代碼塊後執行小數據池
1.4 == is
1.4.1 == 判斷等號兩邊值是否相等
1.4.2 is 判斷兩邊的值內存地址是否相等
2.深淺拷貝
2.1 賦值:
多個變量名指向同一個內存地址
一個變量對其進行操做,其餘變量查看時都變更
2.2 淺拷貝:
lst[1:10] -- 是淺拷貝
淺拷貝只拷貝第一層元素
修改第一層元素的時候,新開闢的不進行改變
2.3 深拷貝:
不可變的數據類型共用,可變的數據類型從新開闢一個空間
對源數據進行修改,深拷貝的內容不進行改變