Python 存儲模型


1、Python徹底分離了對象和引用,可以認為內存中的對象都是不可修改的,每次修改引用,相當於在堆上重新創建一個對象,引用指向新對象。

2、對於數值和字符串,修改意味着引用指向一個新對象。

3、集合中的元素都是引用。考慮元組,元組中的引用不能增加刪除,也不能修改引用的指向。但是元組本身也是個引用,可以指向另一個元組。

4、考慮列表,列表中的引用可以增加刪除,也可以修改引用的指向。列表本身也是個引用,也可以指向另一個列表。

5、考慮字典,字典的key不能修改指向,value可以修改指向。字典本身也是個引用,也可以指向另一個字典。

6、考慮下面的情況,listB = listA, listB 與 listA 指向同一個列表,listB修改元素也會影響到listA,如果不想受到影響怎么辦?

  進行深拷貝,listB = deepcopy(listA), 這種情況下,listB只是對listA中的元素(引用)做了copy,對應的元素還是指向同一個對象。當listB修改元素的指向時,listA不受影響。

  在Python中,深拷貝也只是拷貝引用,不會對內容拷貝。因此,對於包含引用的引用(也就是集合),深拷貝才有意義。

7、為什么設計出元組?畢竟列表可以完全取代元素。

  這體現了“最小特權原則”,也就是盡量限制別人不該有的權利。元組是一種弱化了的列表,不允許對其中的引用增加刪除,也不允許修改引用的指向。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM