成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python數據模型與Python對象模型

開發 后端
Python數據模型就是常說的對象模型,萬物皆對象,有編號、類型、值三個要素。了解了對象模型后,Python另一個重要概念即將浮出水面,它就是數據結構。

[[378594]]

本文轉載自微信公眾號「PythonMind」,作者dongfanger。轉載本文請聯系PythonMind公眾號。  

數據模型==對象模型

Python官方文檔說法是“Python數據模型”,大多數Python書籍作者說法是“Python對象模型”,它們是一個意思,表示“計算機編程語言中對象的屬性”。這句話有點抽象,只要知道對象是Python對數據的抽象,在Python中萬物皆對象就可以了。

官方文檔嚴謹說法,Python程序中的所有數據都是用對象或對象之間的關系來表示的。

對象三要素

對象有三個要素:編號(identity)、類型(type)、值(value)。

identity

編號就是對象的內存地址,從創建后就不會改變。is運算符用來比較2個對象的編號。id()函數返回對象編號的整數表示。

identity也可以翻譯為身份,對象身份。

type

類型決定了可以對對象做哪些操作,也定義了對象的可能值,比如int和bool類型的值就不一樣。type()函數返回對象類型。很多人會誤以為Python是弱類型語言,其實Python是強類型語言,這個誤解的真實原因是,Python不需要編譯,不需要提前知道變量的類型,在運行時才檢查類型,這應該叫做動態語言。

JavaScript是弱類型語言,在Python中1+"2"會運行失敗,在JavaScript中能運行成功。

類型在創建后也不會改變,雖然可以進行類型轉換,但轉換實際會產生新對象:

  1. a = 1 
  2. print(id(a)) 
  3. print(id(str(a))) 
  4. print(id(a)) 

結果為:

  1. 140715000207008 
  2. 2136059506160 
  3. 140715000207008 

value

對象三要素中唯一能改變的就只有值了。官網有一句正確的廢話:允許改變值的對象是mutable(可變的),不允許改變值的對象是immutable(不可變的)。它的意義在于當不可變對象的值是對可變對象的引用時,該如何判斷對象的可變性?結論是不可變對象仍然是不可變的,因為這個引用是不能變的,但是我們通常會認為這個不可變對象的值是可變的,尤其是對象容器。對象類型也會決定是否可變,比如numbers、strings、tuples是不可變的,dictionaries、lists是可變的。

對象容器

有些對象包含了對其他對象的引用,這叫做containers對象容器,比如tuples、lists、dictionaries。大多數情況下,我們說容器的值,說的是引用的對象的值,而不是引用編號。但討論容器可變性時,則僅僅是指容器直接包含的引用編號。比如tuple是不可變的,如果它包含了對一個可變對象的引用后,當該可變對象改變時容器的值也會改變。

對象回收

對象不會被顯式銷毀,但是它們會被當做垃圾回收,只要不存在對象引用,這就是Python垃圾回收機制!垃圾回收機制比較復雜,比如循環引用,實際上已經沒有使用了,但是還存在引用等,涉及到算法規則,等寫完Python進階,在寫Python原理時做進一步研究。

Python垃圾回收機制不是銀彈,不能解決所有問題,所以在引用外部資源,比如打開文件后,我們需要注意顯式close,防止資源始終占用內存,無法釋放,造成內存泄漏。close除了手動調用close()方法外,也可以使用with來自動close。

使用try...except可能會讓對象繼續存活。

類型決定一切

對象的類型幾乎決定了對象的一切行為,甚至是對象編號,比如對于不可變類型:

  1. a = 1 
  2. b = 1 

a和b可能會指向同一個值為1的對象,也可能會指向兩個不同的值為1的對象,這取決于具體實現。

但是對于可變類型:

  1. c = [] 
  2. d = [] 

c和d一定會指向兩個不同的單獨的空列表。

注意c = d = [] 則是將同一個對象賦值給 c 和 d。

小結

Python數據模型就是常說的對象模型,萬物皆對象,有編號、類型、值三個要素。了解了對象模型后,Python另一個重要概念即將浮出水面,它就是數據結構。

參考資料:

《流暢的Python》

https://docs.python.org/3/reference/datamodel.html

 

責任編輯:武曉燕 來源: PythonMind
相關推薦

2012-11-12 10:34:50

IBMdw

2010-05-26 14:37:56

Cassandra數據

2021-02-28 22:20:25

2009-09-18 14:07:51

LINQ to SQL

2012-03-05 10:54:03

NoSQL

2021-07-14 10:09:05

架構模型數據

2023-10-26 06:55:46

大數據數據倉庫

2016-11-02 12:32:47

數據分析大數據模型

2010-08-11 09:29:25

FlexJava數據模型

2017-06-27 10:08:29

數據倉庫模型

2024-12-02 11:00:00

Python數據模型代碼

2022-08-15 14:49:12

物聯網數據模型存儲

2021-01-15 13:18:39

數據模型領域模型代碼

2022-12-09 09:39:01

數據治理

2024-05-13 11:25:08

概念模型邏輯模型物理模型

2020-10-14 06:28:38

數據倉庫模型

2009-07-20 14:14:03

PowerDesign

2009-11-12 16:39:02

ADO.NET實體數據

2016-01-07 11:25:12

數據模型訓練數據

2024-11-15 11:43:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 久久夜视频 | 欧美自拍第一页 | 亚洲免费网站 | 成人免费小视频 | 国产羞羞视频在线观看 | 免费观看一级毛片 | 国产一级片在线播放 | www.888www看片 | 久久久精彩视频 | 国产乱一区二区三区视频 | 精品在线观看入口 | 日韩精品视频在线观看一区二区三区 | 欧美精品一区二区在线观看 | 综合久久综合久久 | 日韩成人av在线播放 | 国产美女福利在线观看 | av一区二区三区四区 | 精品视频www| 亚洲一区二区在线播放 | 超碰在线播 | 国产精品欧美一区二区 | 日韩一级黄色毛片 | 最新中文字幕在线 | 狠狠干网| 国产精品一区二区三区免费观看 | 国产一区欧美一区 | 久久久久久久久99精品 | 秋霞a级毛片在线看 | 国产激情91久久精品导航 | 北条麻妃av一区二区三区 | 中文字幕在线播放第一页 | 亚洲成人免费视频在线观看 | 国产成人精品一区二区三区网站观看 | 四虎网站在线观看 | 夜夜摸夜夜操 | 天天宗合网 | 午夜精品久久久 | 国产精品99久久久久久宅男 | 热久久免费视频 | 国产91亚洲精品一区二区三区 |