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、为什么设计出元组?毕竟列表可以完全取代元素。

  这体现了“最小特权原则”,也就是尽量限制别人不该有的权利。元组是一种弱化了的列表,不允许对其中的引用增加删除,也不允许修改引用的指向。

原文地址:https://www.cnblogs.com/nzbbody/p/3596418.html