python is id ,集合,深淺拷貝

2022-09-12 02:12:08 字數 4694 閱讀 3234

#

# 01 今日內容大綱

1. is ==id 用法

2. **塊

3. 同一**塊下的快取機制

4. 不同**塊下的快取機制(小資料池)

5. 總結

6. 集合(了解)

7. 深淺copy

## 03 具體內容

1. id is ==```python

#id 身份證號

#i = 100

#s = 'alex'

#print(id(i))

#print(id(s))

#== 比較的是兩邊的值是否相等

#l1 = [1, 2, 3]

#l2 = [1, 2, 3]

#print(l1 == l2)

#s1 = 'alex'

#s2 = 'alex '

#print(s1 == s2)

#is 判斷的是記憶體位址是否相同

#l1 = [1, 2, 3]

#l2 = [1, 2, 3]

#print(id(l1))

#print(id(l2))

#print(l1 is l2)

s1 = '

alex

's2 = '

alex

'print

(id(s1))

print

(id(s2))

print(s1 is

s2)

#id 相同,值一定相同

#值相同,id不一定相同

```2. **塊

+**塊:我們所有的**都需要依賴**塊執行。

+乙個檔案就是乙個**塊。

+互動式命令下一行就是乙個**塊。

3. 兩個機制: 同乙個**塊下,有乙個機制。不同的**塊下,遵循另乙個機制。

4. 同乙個**塊下的快取機制。

+前提條件:同乙個**塊內。

+ 機制內容:pass

+適用的物件: int bool str

+具體細則:所有的數字,bool,幾乎所有的字串。

+優點:提公升效能,節省記憶體。

5. 不同**塊下的快取機制: 小資料池。

-前提條件:不同**塊內。

- 機制內容:pass

-適用的物件: int bool str

- 具體細則:**-5~256數字**,bool,滿足規則的字串。

-優點:提公升效能,節省記憶體。

```python

#i1 = 1000

#i2 = 1000

#i3 = 1000

#l1 = [1,2,3]

#l2 = [1,2,3]

#print(id(l1))

#print(id(l2))

#print(id(i1))

#print(id(i2))

#print(id(i3))

i = 800i1 = 800s1 = '

hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中國

's2 = '

hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中國

'print(i is

i1)

print(s1 is

s2) ```

1. 總結:+

1. 面試題考。

2. 回答的時候一定要分清楚:同乙個**塊下適用乙個快取機制。不同的**塊下適用另乙個快取機制(小資料池)

3. 小資料池:數字的範圍是-5~256.

4. 快取機制的優點:提公升效能,節省記憶體。

2. python基礎資料型別之:集合 set。容器型的資料型別,它要求它裡面的元素是不可變的資料,但是它本身是可變的資料型別。集合是無序的。{}。

+集合的作用:

+列表的去重。

+關係測試: 交集,並集,差集,.....

+ pass

```python

#集合的建立:

#set1 = set()

#set1 =

#print(set1)

#空集合:

#print({}, type({})) # 空字典

#set1 = set()

#print(set1)

#集合的有效性測試

#set1 = }

#print(set1)

#set1 = #增:

#add

#set1.add('xx')

#print(set1)

#update迭代著增加

#set1.update('fdsafgsd')

#print(set1)#刪

#remove

#remove 按照元素刪除

#set1.remove('alexsb')##

print(set1)

#pop 隨即刪除

#set1.pop()

#print(set1)

#變相改值

#set1.remove('太白金星')

#set1.add('男神')

#print(set1)

#關係測試:***#交集

#set1 =

#set2 =

#print(set1 & set2)

#並集:

#print(set1 | set2)

#差集 -

#print(set1 - set2)

#反交集

#print(set1 ^ set2)#子集

#set1 =

#set2 =

## print(set1 < set2)##

# 超集

#print(set2 > set1)

#列表的去重 ***

#l1 = [1,'太白', 1, 2, 2, '太白',2, 6, 6, 6, 3, '太白', 4, 5, ]

#set1 = set(l1)

#l1 = list(set1)

#print(l1)

#用處:資料之間的關係,列表去重。

```3. 深淺copy(面試會考)

```python

#賦值運算

#l1 = [1, 2, 3, [22, 33]]

#l2 = l1##

print(l1)

#print(l2)

#淺copy

#l1 = [1, 2, 3, [22, 33]]

#l2 = l1.copy()##

print(l1,id(l1))

#print(l2,id(l2))

#l1 = [1, 2, 3, [22, 33]]

#l2 = l1.copy()##

print(id(l1[-1]))

#print(id(l2[-1]))

#print(id(l1[0]))

#print(id(l2[0]))

#print(l1)

#print(l2)

#l1 = [1, 2, 3, [22, 33]]

#l2 = l1.copy()

#l1[0] = 90

#print(l1)

#print(l2)

#深copy

#import copy

#l1 = [1, 2, 3, [22, 33]]

#l2 = copy.deepcopy(l1)

## print(id(l1))

## print(id(l2))##

print(l1)

#print(l2)

#相關面試題;

#l1 = [1, 2, 3, [22, 33]]

#l2 = l1[:]##

print(l1)

#print(l2)

#淺copy: list dict: 巢狀的可變的資料型別是同乙個。

#深copy: list dict: 巢狀的可變的資料型別不是同乙個 。

```#

# 04 今日總結

+ id is ==三個方法要會用,知道是做什麼的。

+回答的時候一定要分清楚:同乙個**塊下適用乙個快取機制。不同的**塊下適用另乙個快取機制(小資料池)

+ 小資料池:數字的範圍是-5~256.

+快取機制的優點:提公升效能,節省記憶體。

+集合:列表去重,關係測試。

+ 深淺copy:理解淺copy,深淺copy,課上練習題整明白。

1. id == is:

2. **塊:乙個檔案,互動式命令一行就是乙個**塊。

3. 同一**塊下快取機制(字串駐留機制):

+ 所有數字,bool 幾乎所有的字串

+ 優點:提公升效能,節省記憶體空間。

4. 不同**塊的快取機制(小資料池):在記憶體中開闢兩個空間,乙個空間儲存-5~256的int,乙個空間儲存一定規則的字串,如果你的**中遇到了滿足條件的資料,直接引用提前建立的。

+ -5~256 int,bool,滿足一定規則的字串。

+ 優點:提公升效能,節省記憶體空間。

5. 集合:列表去重,關係測試 交並差。

6. 深淺copy:

+ 淺copy:在記憶體中開闢乙個新的空間存放copy的物件(列表,字典),但是裡面的所有元素與被copy物件的裡面的元素共用乙個。

copy與mutableCopy的深淺拷貝

在討論深淺拷貝之前,先明確一下它們的含義 對於strong修飾的物件,都是淺拷貝,僅拷貝物件的位址,使得物件的引用計數加1 而copy和mutablecopy主要分為集合類物件和非集合類物件來討論,先給一張圖。mutable 可變 immutable 不可變 上圖總結如下 對於集合類物件,在深拷貝時...

ios學習路線 Objective C 深淺拷貝

非容器類物件 nsstring str origin string nsstring strcopy str copy nsmutablestring mstrcopy str mutablecopy nslog array1 p array1 nslog arraycopy1 p arraycop...

iOS strong copy關鍵字之深淺拷貝

大家都知道在定義屬性時會使用關鍵字nonatomic,strong,copy,weak,assign,但是關於copy關鍵字到底掌握多少呢,下面這個寫法會有什麼問題嗎?列印結果 內容相同,記憶體位址是同乙個位址,說明這是指標指向了同一位址而已 這是的copy即是淺拷貝,只是拷貝了指標 注意 上面這種...