1. 程式人生 > >python中的變數和物件

python中的變數和物件

文章標題:Python學習筆記(五)Python動態型別和引用

因為自己對於python中的引用型別有些混,加之看到了上面的文章中的連結,有了一些想法,就寫了下來。

if __name__ == "__main__":
    a = 3  # 賦值操作
    # 建立了一個物件,這個物件是一個int物件,這個int物件的值為3,
    # (如果變數a尚未被建立的話),建立了一個變數a,
    # 將變數a和int物件(其值為3)關聯起來.此時,變數a指向了記憶體中的一個int物件(其值為3)
    a *= 2  # 乘法運算+賦值操作
    # 建立了一個int物件(其值為2),
    # 找到變數a指向的物件(int物件,其值為3),
    # (乘法運算)將int物件(其值為3)和int物件(其值為2)做乘法運算,得到(創建出了)一個新的int物件(其值為6),
    # (賦值操作)將變數a和這個新的int物件(其值為6)關聯起來.此時,變數a指向了記憶體中的一個int物件(其值為6)
    a = "qwert"  # 賦值操作
    # 建立了一個物件,這個物件是一個str物件,這個str物件的值為"qwert"
    # 將變數a和str物件(其值為"qwert")關聯起來.此時,變數a指向了記憶體中的一個str物件(其值為"qwert")
    b = a  # 賦值操作
    # (如果變數b尚未被建立的話),建立了一個變數b,
    # 將變數b和"變數a指向的物件"關聯起來,此時變數a和變數b指向了記憶體中的同一個物件
    b = b + "123"  # 加法運算+賦值操作
    # 找到變數b指向的物件(str物件,其值為"qwert")
    # 將str物件(其值為"qwert")和str物件(其值為"123")做str.__add__運算,得到一個新的str物件(其值為"qwert123")
    # 將變數b和這個新的str物件(其值為"qwert123")關聯起來.
    # 此時,變數b指向了記憶體中的一個str物件(其值為"qwert123"),變數a指向了記憶體中的另一個str物件(其值為"qwert")
    a = [1, "str"]
    # 建立了一個list物件,其值為[1, "str"],
    # 將變數a指向記憶體中的一個list物件(其值為[1, "str"]),
    b = a
    # 將變數b和"變數a指向的物件"關聯起來,此時變數a和變數b指向了記憶體中的同一個物件
    b.append("obj")
    # 找到變數b指向的物件(list物件,其值為[1, "str"])
    # 呼叫這個物件的append方法,將str物件(其值為"obj")新增到這個物件裡面.此時,這個物件因為append方法該變了自己,這個list物件變成了[1, "str", "obj"]
    # 因為變數a和變數b指向了同一個物件,但是這個物件被(自己的成員函式)改變了,
    # 所以,變數a改變了,(變數a指向的記憶體中的物件改變了)
    # 所以,變數b改變了,(變數b指向的記憶體中的物件改變了)
    print(b)  # [1, 'str', 'obj']
    print(a)  # [1, 'str', 'obj']
    # 建立了一個物件,這個物件的值,在建立之後,絕對不會再被改變,這樣的類有int,float,str,等
    # 建立了一個物件,這個物件還可以被自己的成員函式改變,這樣的類有list,dict,array,bytearray,等,超級多,
    # 對於tuple,一個tuple被創建出來之後,它裡面的那些個item不可以增加和減少了,但是item自身是可以被自己的資料成員改變的,
    testTuple = (1, "str", [3.14, True, None], bytearray("qwert", encoding="utf_8"))
    print("初始化後的tuple=", testTuple, sep="")
    try:
        testTuple[0] = 3
    except TypeError as e:
        print(e)
    finally:
        pass
    testTuple[2].append("obj")
    testTuple[3].append(49)
    print("修改後的tuple=", testTuple, sep="")
    import sys
    sys.exit(0)

完。