day06——小數據池、深淺拷貝、集合

day06

小數據池

小數據池——緩存機制(駐留機制),只是一種規格,不會實際的開闢一個空間python

  • == 判斷兩邊內容是否相等 *****
# a = 10
# b = 10
# print(a == b)
  • is 基於內存地址進行判斷 *****
# a = 10
# b = 10
# print(a is b)  is判斷基於內存地址進行判斷
# print(id(a))
# print(id(b))

小數據池支持的對象也是:數字,字符串,布爾值面試

  • 小數據池的數字範圍:-5——256*****
  • 字符串:在同一代碼塊下,只要內容相同就採用相同的內存地址

乘法的時候總長度不能超過20*****緩存

乘法的時候中文,特殊符號乘以0app

  • 布爾值:在同一代碼塊下,只要內容相同就採用相同的內存地址

小數據池的驗證方法,必須脫離代碼塊才能進行驗證函數

先執行代碼塊的規則,當代碼塊的規則不符合的時候再執行小數據池的規則(駐留機制)code

# a = -2.5 * 2
# b = -2.5 * 2
# print(id(a))
# print(id(b))  
# print(a is b)   # True


# a = "alex你好" *2
# b = "alex你好" *2
# print(id(a))
# print(id(b))
# print(a is b)   # True
代碼塊

一個文件,一個函數,一個類,一個模塊,終端中每一行是一個代碼塊對象

支持的數據類型:數字,字符串,布爾值索引

  • 數字:在同一個代碼塊下,只要內容相同就採用相同的內存地址(比-5小的就不是)

數字在作乘法的時候範圍: -5——256,不能使用浮點數 *****內存

  • 字符串:在同一代碼塊下,只要內容相同就採用相同的內存地址

乘法的時候總長度不能超過20 *****rem

乘法的時候中文,特殊符號乘以1或0

  • 布爾值:在同一代碼塊下,只要內容相同就採用相同的內存地址

深淺拷貝

面試必問:賦值,淺拷貝,深拷貝

賦值:

# lst = [1,2,3,[5,6,7]]
# lst1 = lst
# print(lst1)
# print(lst)

# lst[-1].append(8)
# print(lst1)
# print(lst)
淺拷貝

拷貝:複製

淺拷貝的時候,只會開闢一個新的容器列表,其餘元素使用的都是源列表中的元素

淺拷貝的時候只拷貝第一層元素

規則:

修改原列表裏面的總體元素只有原列表改變,若是修改原列表裏面的總體元素裏面的元素,則兩個都改變

修改新列表裏面的總體元素只有新列表改變,若是修改新列表裏面的總體元素裏面的元素,則兩個都改變

若是隻是修改原列表或者新列表的總體元素,則改變的那個列表改變,另一個不改變

# lst1 = lst.copy()  # 新開闢一個空間給lst1
#
# print(lst[-1])
# print(lst1[-1])
#
# print(id(lst1[-1]))
# print(id(lst[-1]))

# 淺拷貝的時候,只會開闢一個新的容器列表,其餘元素使用的都是源列表中的元素

# lst = [1,2,3,[5,6,7]]
# lst1 = lst.copy()
# lst1[-1].append(8)
# print(lst)
# print(lst1)

# lst = [1,2,3,[5,6,7]]
# lst1 = lst.copy()
# lst[3] = 567
# print(lst1)
# print(lst)


# lst = [1,2,3,4,[5,6,7,[8,9]]]
# lst1 = lst.copy()  #  [1,2,3,4,[5,6,7,[8,9]],10]
# lst1.append(10)
# print(lst)
# print(lst1)

# lst = [1,2,3,4,[5,6,7,[8,9]]]
# lst1 = lst.copy()
# lst1[-1][-1] = "56"
# print(lst) # [1,2,3,4,[5,6,7,[8,9]]]
# print(lst1) # ["56",2,3,4,[5,6,7,[8,9]]]

# lst = [[1,2,],90,6,7,[5,6]]
# lst1 = lst.copy()
# lst1[-1] = 8
# print(lst)
# print(lst1)

# dic = {"alex":[1,2,3,[5,6]]}
# dic1 = dic.copy()
# dic["alex"][0] = "56"
# print(dic)
# print(dic1)
深拷貝

須要導入:import copy

深拷貝開闢一個容器空間(列表),不可變數據類型公用,可變數據類型(再次開闢一個新的空間),空間裏的值是不可變的值進行共用的,可變的數據類型再次開闢空間

# import copy  #導入
# lst = [1,2,3,[5,6,7]]
# lst1 = copy.deepcopy(lst)  # 深拷貝
# lst[-1].append(8)
# print(lst)
# print(lst1)


# lst = [1,2,3,[5,6,7,[8,10,9]]]
# import copy
# lst1 = copy.deepcopy(lst)
# print(id(lst[-1][-1]))
# print(id(lst1[-1][-1]))

集合

集合 ——set 無序的——不支持索引

沒有值的字典,自然去重

相似字典的鍵,可變類型不能放:列表、字典、集合不能放

# 定義集合
# s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
# print(s)
  • add() :只能添加一個
  • update() :迭代添加
# s = {1,2,3,4}
# s.add("67")  #只能添加一個
# print(s)
# s.update("今天")  # 迭代添加
# print(s)
  • pop() :隨機刪除,有返回值
  • remove(值) :指定刪除
  • clear() :清空 ——set() 空集合
# s = {1,2,3,4}
# print(s.pop())  # pop有返回值
# print(s)
# s.remove(3)     # 指定元素刪除
# print(s)
# s.clear()         # 清空   -- set() 空集合
# print(s)

先刪除再添加

for循環

# for i in {1,2,3}:
#     print(i)

打印的時候是無序的,循環的是有序的

其餘操做

交集:&

並集: |

差集: -

反交集:^

父集(超集): >

子集 : <099

frozenset() : 凍結集合

# 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)

面試題:

# 面試題:
# lst = [1,2,1,2,4,2,45,3,2,45,2345,]
# print(list(set(lst)))
相關文章
相關標籤/搜索