目錄
1、可變與不可變物件歸類
2、可變與可變物件的區別
3、不可變物件的應用場景
它們在需要常量雜湊值的地方起著重要作用,例如作為字典中的鍵
從記憶體角度出發說下有什麼區別?
不可變物件:
可變物件:
變的是:原來物件的內容,不會建立新物件,而變數也還是指向原物件
1、不可變物件-整型
a = 123
b = a
print(id(a))
print(id(b))
print(a, b)
a += 2
print(id(a))
print(id(b))
print(a, b)
# 輸出結果
4473956912
4473956912
123 123
4473956976
4473956912
125 123
可以看看下面的圖
首先,這是乙個記憶體區域
原理:k**qxke
2、不可變物件-字串
a = "test"
b = a
print(id(a))
print(id(b))
print(a, b)
a += "123"
print(id(a))
print(id(b))
print(a, b)
# 輸出結果
4455345392
445534539
test test
4455818288
4455345392
test123 test
3、不可變物件-元組
a = (1, 2, 3)
b = a
print(id(a))
print(id(b))
print(a, b)
a = a + a
print(id(a))
print(id(b))
print(a, b)
# 輸出結果
4455410240
4455410240
(1, 2, 3) (1, 2, 3)
4455359200
4455410240
(1, 2, 3, 1, 2, 3) (1, 2, 3)
4、可變物件列表
# 列表
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
print(a, b)
a += [4, 5, 6]
print(a, b)
print(id(a))
print(id(b))
# 輸出結果
4327665856
4327665856
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
4327665856
4327665856
能看到 a 變數修改值之後,b 的值也隨之修改了
可以看看下面的圖
這裡先提前講下函式的入門,因為引數傳遞是個挺重要的點
概念:www.cppcns.com
1、引數傳遞不可變物件
# 函式
def test_no_define(age, name):
age = 123
name = "poloyy"
print(age, name)
age = 1
name = "yy"
print(age, name)
test_no_define(age, name)
print(age, name)
# 輸出結果
1 yy
123 poloyy
1 yy
2、引數傳遞可變物件
# 函式
def test_define(dicts, sets):
dicts['age'] = 24
sets.pop()
print(dicts, sets)
dicts =
sets =
print(dicts, sets)
test_define(dicts, sets)
print(dicts, sets)
# 輸出結果
1 yy
總結:
python 可變物件和不可變物件
變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...
Python可變物件和不可變物件
python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...
Python 可變物件和不可變物件
python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...