#-*-coding:utf-8-*-
'''created on 2023年3月27日
@author: zroad
'''#動態型別:型別是在執行過程中自動決定的,而不是通過**宣告
"""一、動態語言賦值的操作過程,以 a = 3為例,分三步完成:
1、建立乙個物件來代表值3。
2、建立乙個變數a,如果它還未建立的話
3、將變數與新的物件3連線起來
""""""
二、關於變數、引用、與物件
a=3實現過程中的python內部結構圖及其解析:執行a=3後,
變數a變成物件3的乙個引用。
變數名 引用 物件
.a . 3
.1、關於變數:變數事實上是到物件記憶體空間的乙個指標;是乙個系統表的元素,
擁有指向物件的連線的空間。
2、關於引用:從變數到物件的連線稱作引用,引用是一種關係,
以記憶體中的指標的形式存在;是自動形成的從變數到物件的指標。
3、關於物件:是分配到一塊記憶體,有足夠的空間去表示它們所代表的值。
""""""
三、關於不變物件:
1、從內部來看作為一種優化,python快取了不變的物件並對其進行復用。
2、不變的物件包括小的整數和字串等
"""x = 1
y = 1
if x is y: #x和y是同乙個物件
print id(x), id(y) #42896512 42896512
s = "ello,python"
s1 = "hello,python"
if s is s1: #s和s1是同乙個物件
print id(s), id(s1)
"""四、型別與物件、變數
1、型別與物件、變數的關係:
1)型別屬於物件,而不是變數。
2)python的變數就是在特定的時間引用了乙個特定的物件
3)物件知道自己的型別,每個物件都包含了乙個頭部資訊,
其中標記了這個物件的型別
2、物件的內部結構:
1)物件由三部分組成: 型別|計數器|值
2)頭部資訊:乙個是型別標誌符,另乙個是引用計數器
3)計數器及其**:每個物件中保持了乙個計數器,
計數器記錄了當前指向該物件的引用的數目,
這個計數器被設定為零,這個物件的記憶體空間就會自動**。
"""b = 3
b = 'spam'
b = 1.33
print
"b=", b #表面上是b變成了不同型別的資料,
實質是變數b引用了不同型別的物件
"""五、共享引用:多變數名引用同乙個物件
"""#1、不可變物件的共享引用
c = 3
d = c
"""內部結構圖:
變數名 引用 物件
c .
. 3
d .
變數a、b指向同乙個物件
"""print c is d #true
c = "hello!"
print c, d #hello! 3
#2、可變物件的引用,可本地修改變數的值
l1 = [1, 2, 3]
l2 = l1
l1[0] = 100
print l1,l2 #[100, 2, 3] [100, 2, 3]
print l1 is l2 #true
動態型別 動態繫結 動態載入
1.動態型別 執行時才知道,物件的型別,動態型別在程式設計中非常常見,簡單的說就是id型別 比如 在自定的時候就是,id型別。當前我們有時候自己定的方法,不確定,傳進來的是什麼型別的物件,我們也id型別,然後在方法內部去確定型別 2.動態繫結 物件被例項化後,就確定的物件型別,也確定了物件的屬性和響...
動態語言的動態型別
1.在靜態語言中,宣告的目的是為了告訴編譯器所使用的變數 是什麼 使型別檢查可以在編譯階段靜態地進行,儘量減少執行時的型別檢查,提高執行效率,但缺乏靈活性。2.而在動態語言中,變數被設計成無型別的,變數的型別可以按需改變,同乙個變數既可作為整型的,也可作為字串,還可用來定義函式。那麼如何保證所執行的...
靜態型別與動態型別
為了支援c 的多型性,才用了動態繫結和靜態繫結。理解他們的區別有助於更好的理解多型性,以及在程式設計的過程中避免犯錯誤,需要理解四個名詞 1 物件的靜態型別 物件在宣告時採用的型別。是在編譯期確定的。2 物件的動態型別 目前所指物件的型別。是在執行期決定的。物件的動態型別可以更改,但是靜態型別無法更...