一、溫故而知新:
1、變數在記憶體的堆疊區和堆區的存盤原理
堆疊區:存放是變數名與記憶體地址的對應關系,所以可以簡單理解為:變數名存記憶體地址,
堆區:存放的是變數值,
強調:只站在變數的名的角度去談一件事情:
變數名的賦值(x=y),還有變數名的傳參(print(x)),傳遞的都是堆疊區的資料
而且堆疊的資料是變數名與記憶體地址的對應關系,或者說是對值的參考,
因此,我們也說,python是參考傳遞,
二、可變型別和不可變型別
1、什么是可變型別和不可變型別?
可變型別:值改變,id不變,證明改的是原值,證明原值是可以被改變的,
就是有骨氣的家伙,表里如一,不可改變,
不可變型別:值改變,id也變了,證明是產生新的值,壓根沒有改變原值,證明原值是不可以被修改的,
算是沒有骨氣的家伙,外表雖然不變,但是心會變……
(還有些云里霧里哈,那先來看看下面的栗子吧——)
2、怎么判斷可變型別以及不可變型別?
2.1 int是不可變型別
>>> >>> x=11 >>> print(id(x)) 140721476655072 >>> x=10 >>> print(id(x))# 只要賦值,一定會產生新的值 140721476655040 >>>
>>> x=10
>>> print(id(x))
140721476655040
>>> x+=2
>>> print(id(x))
140721476655104
>>>
2.2 float是不可變型別
>>> >>> x=3.1 >>> print(id(x)) 2133614198672 >>> x=3.3 >>> print(id(x)) 2133614198576 >>>
2.3 str是不可變型別
>>> >>> x='abcd' >>> print(id(x)) 2133617073904 >>> x='qqqq' >>> print(id(x)) 2133617423536 >>>
小結:int、float、str都被設計成了不可分割的整體,不能夠被改變,所以均為“不可變型別”,
2.4 list是可變型別
>>> >>> m=['aaa','bbb','ccc'] >>> print(id(m)) 2133617504704 >>> m[0]='vvv' >>> print(m) ['vvv', 'bbb', 'ccc'] >>> print(id(m)) 2133617504704 >>> # list 全部元素是個整體,內部某個元素值改變,該串列的id不變(沒有挪窩)
2.5 dict 是可變型別
>>> dic={'k1':111,'k2':333}
>>> print(dic)
{'k1': 111, 'k2': 333}
>>> print(id(dic))
2133617496768
>>> dic['k1']=444444
>>> print(dic)
{'k1': 444444, 'k2': 333}
>>> print(id(dic))
2133617496768
>>> # dic 和 list 一樣,是可變型別(值可變,id不變)——容器還是那個容器,但是容器里的東西可以變化,就是“可變型別”
>>>
{}內用逗號分隔開多key:value,
dic{key:value},key 必須是不可變型別,value可以是任何型別
>>>
>>> dic={[1,2,3]:123,[1,2]:12}
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
dic={[1,2,3]:123,[1,2]:12}
TypeError: unhashable type: 'list'
>>> dic={{'a':1}:123}
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
dic={{'a':1}:123}
TypeError: unhashable type: 'dict'
>>> #可變型別,就是不哈希(unhashable type),不可變型別,就是可哈希(hashable type)
>>>
2.6 bool為不可變型別
0--true
1--false
(意會一下哈……)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181235.html
標籤:Python
上一篇:影像處理——提取梯度
下一篇:協程—gevent模塊的使用
