1,集合python
python中的集合,能夠和列表相比較,由於它們只存儲key,而不存儲value,可是列表有序而集合無序。同時它還能夠和字典比較,由於集合和字典的實現方式同樣,緣由是在集合中一樣不可以放入「可變對象」,還記得字典中咱們說「字典的key必需要惟一」嗎?惟一就表示是不可變嗎?固然,在python的字典中是這樣的!編程
2,集合的操做編程語言
理清了集合的基本狀況,仍是須要練習一下,好比說:CURD -_-|| 函數
看圖上那中寫法,集合的建立方式仍是別緻的。固然了,這個是在python中這麼說的。學習
注意:spa
集合定義時須要使用「圓括號,而後裏面傳遞一個list結構的參數」對象
集合打印出來的樣子並不表示你打印的「set1」是個列表,而是python在告訴你,你的這個集合中有那麼幾個元素。內存
切記,切記!基礎
那麼問題來了,請問:我怎麼知道我打印的「set1」是集合而非列表?變量
這個問題問的好!
一針見血!直中要害!可見功力之深厚,不知道少俠師從何處,何門何派。。。。巴拉巴拉。。。。。。。。
在這裏就須要用到一個比較實用的python內置的函數了,固然了,就目前而言,咱們學習了幾個python的內置函數呢?
答案就像是這樣:
你看,是否是也簡單!
type方法:用來打印一個變量的類型
一樣,也能夠對集合進行增,刪,咱們截(畫)個圖來看看:
至此,集合的學習就結束了?
(⊙o⊙)…不!
有沒有發現,我並無說你能夠對集合進行「改」操做?
那能不能對集合進行「改」操做呢?
首先要明確,你想說的「對集合進行改操做」是什麼意思,那一般我所指的意思是:把集合中的某個元素例如「a」變成「b」的過程,我稱它是「」對集合進行改操做。
可是,這裏有個前提,你準備更改某一個元素,那麼前提你得先找到它!
那麼問題來了?在集合中怎麼找到一個元素?
Think........................................................................................................
因此說,因爲集合是無序的,那麼經過下標來訪問集合的元素是不可能的,可不能夠經過key來找呢?
答案是否認的!
由於集合中就存儲了一個key,你想找誰?
因此說:實際上,咱們沒法對一個集合的元素作出修改!
3,集合的集合操做
集合的集合操做,講求的是:並,交,差
問一個問題:集合中的元素可不能夠重複?(←__← 呵呵)
這樣呢,集合的操做就告一段落了!
同時呢,關於python基礎相關的變量,常量,基本數據類型和幾種擴展數據類型的學習和相關的基本操做,就學習
完~\(≧▽≦)/~啦啦啦
好好好,鼓掌鼓掌 ^_^ ^_^ ^_^
4,論對象的可變與不可變
要時刻牢記一句話:python中對象的建立是之內容爲主,而非「變量」!
在討論以前須要普及一個函數:id , 用來獲得一個變量的內存地址
有什麼用呢?
咱們都知道,變量最終是要存入到內存中的,而內存是編了號的,因此,一個變量在內存中就會有一個惟一的編號和它對應!
使用方法咱們仍是畫個圖來講一下,就像是這樣:
在python中,當你建立一個「內存中沒有的東西」的時候,python纔會爲它從新分配內存,若是說你建立的一個東西,以前在內存中已經存在過了,那麼python會把你的變量指向這個已經存在的東西,而不是從新分配內存。
這也就是我說的,python中分配內存是以「內容爲準」而非「變量」!
若是你不理解,那麼請看下面這個例子:
就像上面看到的,若是是在其它的編程語言中,變量「varx」雖然通過從新賦值,可是它在內存中只有一份。也就是說,即便通過從新賦值,「vax」的內存地址是不變的,對吧?
可是在python中,若是你能套用上面我說的「準則」,那麼也許你就猜到了「結局」
對,就是這樣!
再次理解理解上面哥的「準則」,那你看下面這個例子,是否是就清晰多了呢?注意:變量名但是變了的(⊙o⊙)哦
有了上面的基礎,如今來看看關於集合、字典和元組中的key不可變,是個什麼意思。
好比說集合,就像是這樣:
你可能會驚訝,不是說集合的key不可變嗎?怎麼還能放個變量呢?並且。。。。。並且。。。。集合的元素值不是變了嗎?
實際狀況是,變量「varx」是個小婊砸,它能夠一下子指向「aaa」這個對象,一下子指向「bbb」這個對象,而它自己沒發生變化,而集合則很忠貞,它永遠找的是變量「varx」指向的真正的內容,當它發現第二次集合的元素的內容和第一次的有不一樣的時候,它自己不會發生變化,而是「硬生生的弄出一個分身」!而後就成了你看到的那樣子!
好了,一下說那麼多,確實挺累的!
留個做業:若是你在集合中,放一個列表會出現什麼狀況?解釋下緣由看看!
5,補充:關於python中的比較,is or ==
python中用 == 來比較兩個變量的值是否相等,而經過關鍵字 is 來比較兩個變量是不是同一個對象,也就是兩個變量是否指向同一塊內存,也就是兩個變量的 id 值是否相等!
那,結合已有經驗,你可否猜中這個的結局?
是啊,它們就是一個 True 一個 False ( ⊙ o ⊙ )啊!
沒有錯啊,怎麼啦?
---------------------------------------------華麗的分割線---------------------------------------------------
明天週日,不上班!