集合以及深淺拷貝和和小數據池--我的一些經驗總結

小數據池 --緩存機制

==哦按段兩邊你的內容是否相等python

a=10面試

b=10緩存

print(a==b)app

is 是函數

a=10code

b=10索引

print(a is b) is 判斷機遇內存地址就行判斷內存

print(id (a))rem

print(id(b))字符串

小數據池的數字範圍:-5~256

代碼塊:一個py文件 一各函數 一個類 一個模塊,終端中每一行都是一個代碼塊

支持三種數據類型

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

數字在作乘法的時候範圍-5~256 1252 在 130 2 不行

數字在使用乘法的時候不能使用浮點數(-2.5*2)

字符串

在贊成代碼塊下,只要內容相同就採用相同的內存地址

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

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

1562812224585

布爾值

內容相同採用統一內存地址

小數據池

1562812394898

數字 -5~256

字符串

在統一代碼塊下,只要內容相容就採用相同的內存地址

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

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

布爾值

小數據池的驗證發放,必須脫離代碼塊才能進行驗證

cmd終端查看

1562812436278

執行順序

先執行代碼塊的規則,再進行小數據池的規則--駐留機制

1562812466645

必會

==判斷等號兩邊的值是否相等

is 判斷兩邊的內存地址是否相等

深淺拷貝

面試必問

  1. 賦值,淺拷貝,深拷貝
    1. 賦值
lst=[1,2,3,4,[5,6]]
lst1=lst
print(lst1)
print(lst)
print(id(lst1))
print(id(lst))

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

lst=[1,2,3,[4,5,6]]
lst1=lst.copy
s.append(7)
print(lst)
print(lst1)
結果
[1,2,3,[4,5,6],7]
[1,2,3,[4,5,6]]

2.
s[-1].append(7)
print(lst)
print(lst1)
結果
[1,2,3,[4,5,6,7]]
[1,2,3,[4,5,6,7]]
#總結
#淺拷貝的時候只拷貝第一層元素
#淺拷貝在修改第一層元素(不可變數據類型)的時候,拷貝出來的新列表不進行改變
#淺拷貝在替換第一層元素(不可變數據類型)的時候,拷貝出來的新列表不進行改變
#淺拷貝在修改第一層元素中的元素(第二層)的時候,拷貝出來的新列表進行修改

深拷貝

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


2
lst.append(7)
print(lst)
print(lst1)
#結果
[1, 2, 3, [4, 5, 6], 7]
[1, 2, 3, [4, 5, 6]]

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

深淺拷貝

  1. 賦值:

多個變量名指向同一個內存地址,一個變量對其進行操做,其餘變量查看時都變更

  1. 淺拷貝:

lst[1:10]-- 是淺拷貝,淺拷貝只拷貝第一層元素,修改第一層元素是,新開闢的不進行改變

  1. 深拷貝:

不可變的數據類型共用,可變數據類型從新開闢一個空間,對源數據進行修改,深拷貝的內容不進行改變

可變類型新拷貝的變

不可變的新拷貝不變

集合--set

集合#沒有值的字典 無需--不支持索引

自然去重 去重複

  1. 定義集合

s={1,"song",Flase,(1,2,3),12,1,12}

print(s)

##面試題
s=[1,2,3,1,33,56,3,4]
print(list(set(s)))
一行代碼去重複 先轉成集合去重再變成列表

s={1,2,3,4}

  1. s.add("66") #只添加一下

print(s)

{1,2,3,4,"66"}

  1. s.update("今天") # 迭代添加

print(s)

{1,2,3,4,"今","天"}

print(s.pop())  #pop有返回值
print(s)
s.remove(3)    #指定元素刪除
s.clear()    #清空--set()  空集合

先刪在加
s.renmove(3)
s,add(2)
print(s)

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

其餘操做

s1={1,2,3,4,5,6}

s2={2,3,4}

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)

不免紕漏 歡迎交流

相關文章
相關標籤/搜索