Python錯題集

來源:互聯網
上載者:User

標籤:錯題   分析   Python   總結   

知錯能改1.設定變數a=2, 變數b=a, 然後再設定a=3, 此時再查看b也會等於3
  • 答案解析:

變數a=2, b=a, 再將a=3後,此時查看a的結果是3,但b的結果依然是2,因為b=a其實不將b變數指向了a,而是把b的值 指向在了a變數所指向的值 ,如果 a 之後又改成了3,python解譯器會開闢一塊新的記憶體空間並將值 存為3,然後a記憶體的指標就指向了3的地址,但2所在的記憶體位址是不變的,既然b指向了2的地址,所以b的值依然是2

總結:+=對於可變對象(dict,list)來說,以最小動作為基礎,是在原處修改的= 另外的是產生了一個新的對象
知識點:記憶體回收1. 小整數對象池

整數在程式中的使用非常廣泛,Python為了最佳化速度,使用了小整數對象池, 避免為整數頻繁申請和銷毀記憶體空間。

Python 對小整數的定義是 [-5, 257) 這些整數對象是提前建立好的,不會被記憶體回收。在一個 Python 的程式中,所有位於這個範圍內的整數使用的都是同一個對象.

同理,單個字母也是這樣的。

但是當定義2個相同的字串時,引用計數為0,觸發記憶體回收

2. 大整數對象池

每一個大整數,均建立一個新的對象。

3. intern機制

a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld"
python會不會建立9個對象呢?在記憶體中會不會開闢9個”HelloWorld”的記憶體空間呢? 想一下,如果是這樣的話,我們寫10000個對象,比如a1=”HelloWorld”…..a1000=”HelloWorld”, 那他豈不是開闢了1000個”HelloWorld”所佔的記憶體空間了呢?如果真這樣,記憶體不就爆了嗎?所以python中有這樣一個機制——intern機制,讓他只佔用一個”HelloWorld”所佔的記憶體空間。靠引用計數去維護何時釋放。

總結:記憶體回收
  • 小整數[-5,257)共用對象,常駐記憶體
  • 單個字元共用對象,常駐記憶體
  • 單個單詞,不可修改,預設開啟intern機制,共用對象,引用計數為0,則銷毀 單詞記憶體回收
  • 字串(含有空格),不可修改,沒開啟intern機制,不共用對象,引用計數為0,銷毀
  • 大整數不共用記憶體,引用計數為0,銷毀 大整數記憶體回收
  • 數實值型別和字串類型在 Python 中都是不可變的,這意味著你無法修改這個對象的值,每次對變數的修改,實際上是建立一個新的對象 不可變

Python錯題集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.