可變和不可變類型
不可變類型
內(nèi)存中的數(shù)據(jù)不允許被修改:
數(shù)字類型 int, bool, float, complex, long(2.x)
字符串 str
元組 tuple
可變類型
內(nèi)存中的數(shù)據(jù)可以被修改:
列表 list
字典 dict
a = 1
a = "hello"
a = [1, 2, 3]
a = [3, 2, 1]
list = [1, 2, 3]
print("定義列表后的內(nèi)存地址 %d" % id(list))
list.append(999)
list.pop(0)
list.remove(2)
list[0] = 10
print("修改數(shù)據(jù)后的內(nèi)存地址 %d" % id(list))
dict = {"name": "小明"}
print("定義字典后的內(nèi)存地址 %d" % id(dict))
dict["age"] = 18
dict.pop("name")
dict["name"] = "老王"
print("修改數(shù)據(jù)后的內(nèi)存地址 %d" % id(dict))
注意:字典的 key 只能使用不可變類型的數(shù)據(jù)
注意
可變類型的數(shù)據(jù)變化,是通過 方法 來實現(xiàn)的
如果給一個可變類型的變量,賦值了一個新的數(shù)據(jù),引用會修改
變量 不再 對之前的數(shù)據(jù)引用
變量 改為 對新賦值的數(shù)據(jù)引用
哈希 (hash)
Python 中內(nèi)置有一個名字叫做 hash(o) 的函數(shù)
接收一個 不可變類型 的數(shù)據(jù)作為 參數(shù)
返回 結(jié)果是一個 整數(shù)
哈希 是一種 算法,其作用就是提取數(shù)據(jù)的 特征碼(指紋)
相同的內(nèi)容 得到 相同的結(jié)果
不同的內(nèi)容 得到 不同的結(jié)果
在 Python 中,設(shè)置字典的 鍵值對 時,會首先對 key 進行 hash 已決定如何在內(nèi)存中保存字典的數(shù)據(jù),以方便 后續(xù) 對字典的操作:增、刪、改、查
鍵值對的 key 必須是不可變類型數(shù)據(jù)
鍵值對的 value 可以是任意類型的數(shù)據(jù)