对象引用和垃圾回收
《Python3高级核心技术97讲,bobby》学习笔记,第六章:对象引用和垃圾回收
319阅读 · 2020-6-11 23:36发布
6.1 python中的变量
- 先生成对象,再把变量指向对象(先申请内存空间存放值,再把python变量指针指向值)。
- 变量如果指向一个可变对象,每生成一个新的对象会重新生成id。
- intern机制:将小整数(例如1、"abc"等)建立全局唯一对象,后续使用时会直接使用全局唯一对象(优化机制)。
参数使用可变对象的时候,可能会出现共用的情况。例如设置可变对象为默认值时(参数的默认值存放在company.__init__.__default__)。共用情况示例代码:
class Company: def __init__(self,name,staffs=[]): self.name = name self.staffs = staffs def add(self, staff_name): self.staffs.append(staff_name) # self.staffs += staff_name def remove(self, staff_name): self.staffs.remove(staff_name) if __name__ == "__main__": com2 = Company("com2") com2.add("aaa") print(com2.staffs) com3 = Company("com3") com3.add("bbb") print(com2.staffs) print(com3.staffs) #打印: #['aaa'] #['aaa', 'bbb'] #['aaa', 'bbb']
6.2 ==和is的区别
- is判断两个对象的id是否相等。
- ==会调用__eq__魔法函数对比。
6.3 del语句和垃圾回收
- python中垃圾算法采用引用计数。
- del对象会使对应的引用计数减1。
- 引用计数减到0的时候,python解释器会将对象回收。
- __del__魔法函数:python解释器回收对象的时候会调用__del__魔法函数。