Python中數據的存儲與對象管理

1. 引用

1.1 引用的概念

  • 引用是一種變量指向數據存儲空間的現象
  • 內存地址是數據在物理內存中的存儲位置
  • 引用地址是對象在內存中的描述性地址,該地址與內存地址有區別

1.2 引用的特徵

相同的數據在內存空間中僅佔用一個存儲空間,不一樣的變量使用相同的數據則指向相同的存儲空間。python

1.3 獲取內存存儲地址(編號)

語法格式:函數

id(數據)
id(變量名)
複製代碼

1.4 地址存儲的特殊性

使用固定內存地址存儲數據以下:spa

  • -5到256的整數
  • True和False
  • 由字母、數字、下劃線組成的字符串 使用臨時內存地址存儲數據以下:
  • 小於-5 後大於256的整數
  • 全部小數
  • 包含祖母、數字、下劃線以外的字符組成的字符串

2. 列表引用

2.1 列表存儲空間

  • 無變量引用

列表保存在臨時引用地址中,該引用地址能夠反覆使用code

  • 有變量引用

列表保存在獨立引用地址中,該引用地址專用,每一個列表對象具備獨立的引用地址cdn

2.2 列表存儲空間變動

1.列表變量指向引用地址,該引用地址中保存有存儲列表信息的內存地址。對象

2.當列表中存儲市局的空間不足時,會申請新的內存地址,並更新引用地址中對應的內存地址。blog

3.從新申請的內存地址將複製原始內存地址中的數據。索引

2.3 列表中的數據存儲

1.列表中存儲的數據都是數據對應的內存地址,沒有真實數據內存

2.列表中的數據是經過引用地址的形式查找真實數據字符串

3. 元組的引用

3.1 元組存儲空間

  • 空元組(無數據)

空元組指向統一的獨立引用地址,全部空元組共用同一個引用地址

  • 非空元組(有數據)

非空元組保存在獨立引用地址中,每一個元組對象具備獨立引用地址

注:因爲元組不支持修改,不存在從新申請空間的問題,元組建立的同時存儲的數據已經固定,內存結構也固定。

3.2 元組中的數據存儲(同列表)

1.元組中存儲的數據都是數據對應的內存地址,沒有真實數據

2.元組中的數據是經過引用地址的形式查找真實數據

注:元組不支持修改,可是元組中的數據若是是引用類型的,對應的數據能夠在自身的內存地址中進行數據變動,對元組不影響。

4. 集合引用(同列表)

4.1 集合存儲空間

  • 無變量引用

集合保存在臨時引用地址中,該引用地址能夠反覆使用

  • 有變量引用

集合保存在獨立引用地址中,該引用地址專用,每一個列表對象具備獨立的引用地址

4.2 集合存儲空間的變動

1.集合變量指向引用地址,該引用地址中保存有存儲集合信息的內存地址。

2.當集合中存儲數據的空間不足時,會申請新的內存地址,並更新引用地址中對應的內存地址。

3.從新申請的內存地址將複製原始內存地址中的數據。

4.3 集合中的數據存儲

1.集合中存儲的數據都是數據對應的內存地址,沒有真實數據

2.集合中的數據是經過引用地址的形式查找真實數據

5. 字典引用(同列表)

5.1 字典存儲空間

  • 無變量引用

字典保存在臨時引用地址中,該引用地址能夠反覆使用

  • 有變量引用

字典保存在獨立引用地址中,該引用地址專用,每一個字典對象具備獨立的引用地址

5.2 字典存儲空間變動

1.字典變量指向引用地址,該引用地址中保存有存儲字典信息的內存地址。

2.當字典中存儲數據的空間不足時,會申請新的內存地址,並更新引用地址中對應的內存地址。

3.從新申請的內存地址將複製原始內存地址中的數據。

5.3 字典中的數據存儲 1.字典中存儲的數據都是數據對應的內存地址,沒有真實數據

2.字典中的數據是經過引用地址的形式查找真實數據

6. 對象引用

6.1 對象存儲空間

  • 無變量引用

對象保存在臨時引用地址中,該引用地址能夠反覆使用

  • 有變量引用

對象保存在獨立引用地址中,該引用地址專用,每一個列表對象具備獨立的引用地址

6.2 對象中的變量數據

1.對象中的變量存儲的都是對應數據的引用地址,沒有真實數據 2.對象中的變量是經過引用地址的形式查找真實數據 3.對象中的變量存儲形式是一個字典的形式,對變量的操做參照字典的操做方式,變量名爲字典的key,變量值爲字典的value

7.可變類型與不可變類型

7.1 基本概念

數據存儲空間中的數據能夠發生變化的數據稱爲可變類型數據

數據存儲空間中的數據不能發生變化的數據稱爲不可變類型數據

7.2 分類

可變類型數據

  • 列表
  • 集合
  • 字典
  • 對象

不可變類型數據

  • 數值
  • 字符串
  • 布爾
  • 元組

7.3 函數調用時的實參

  • 函數的實參使用可變類型數據時,在函數內部對形參進行數據操做,實參將發生改變
  • 函數的實參使用不可變類型數據時,在函數內部對形參進行數據操做,實參將不會發生改變

7.4 函數定義時的形參

條件1:函數形參使用默認參數

條件2:函數調用時未對默認參數傳值

條件3:函數的形參使用可變類型數據

上述3個條件同時知足時,屢次調用對應函數時,操做的形參是同一個對象

以上7點是抽象概念,有助於更深層次的理解Python中的數據

8.對象的建立

8.1__new__方法的做用

__new__方法用於定義建立對象時執行的操做,__new__方法僅僅爲用戶提供一個建立對象時干預的入口,真正執行建立對象的操做由object類中的__new__方法完成。

8.2__new__方法定義

定義__new__方法是對object類中__new__方法的重寫,重寫該方法時必須再次調用object類中的__new__方法。

8.3__new__方法調用

__new__方法在建立對象時自動運行,無需手工執行調用該方法。

9. 對象的刪除

9.1 del操做的做用

del操做的實質是斷開變量與內存數據之間的引用,操做del執行後等同於對應變量未進行過定義。

9.2 del操做執行範圍

1.刪除定義的變量:功能等同於變量未定義

2.刪除存儲模型中的數據;將數據按照變量的形式看待,功能等同於未定義過對應的數據

  • 列表數據報錯:索引不存在
  • 元組對象報錯:元組對象不支持對象的刪除
  • 字典對象報錯:鍵錯誤,鍵不存在
    3.對象中的屬性:對象對象等同於該對象未定義過該屬性

9.3__del__方法做用

__del__方法用於定義對象不存在任何引用時執行的操做。當對象斷開了與最後一個變量之間的引用關係時,將執行該對象的__new__方法。

9.4__del__方法執行的範圍

1.當手工執行斷開變量與對象的最後一個引用時執行,即del操做

2.當程序執行完畢時,全部變量對應的引用都斷開,此時執行,即退出程序

9.5__del__方法調用

__del__方法在對象斷開與最後一個變量之間的引用關係時自動執行,無需手工執行調用該方法。

10. 對象判等

10.1 對象判等概念

當兩個對象對應的引用地址相同時,稱這兩個對象是同一個對象。

10.2 對象判等語法格式

對象引用地址判等:

對象名  is 對象名  或  變量名  is  變量名
複製代碼

數據引用地址斷定:

數據  is  數據
複製代碼

注:判等操做的結果是True或False

10.3 ==與is的區別

  • =操做針對斷定的內容不一樣,規則不一樣。例如數值性數據比較數值的大小,不考慮是整數仍是小數。字符串比較字符串的內容是否相同,不考慮引用地址是否相同。
  • is操做只針對地址進行斷定,只要地址相同即返回True,不然返回False

11. 單例模式

11.1 單例模式的做用

控制一個類只能建立出單個實例對象。

11.2 單例模式書寫的規範

class 類名:
    __instance = None
    def __new__(cls,*args,**kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(類名)
        return cls.__instance
複製代碼

11.3 注意事項

1.定義的類變量要進行私有化,負責能夠經過類名在類的外部訪問到

2.對象的判空慚怍使用is進行斷定

相關文章
相關標籤/搜索