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、為什么設計出元組?畢竟列表可以完全取代元素。
這體現了“最小特權原則”,也就是盡量限制別人不該有的權利。元組是一種弱化了的列表,不允許對其中的引用增加刪除,也不允許修改引用的指向。