Python类与对象
1.检查对象类型
isinstance()函数能够实现继承,所以是检查所有Python对象类型的首选方式。过多的检查会影响性能。
2.引用计数和垃圾收集
所有的对象都有引用计数。使用del语句或者引用超出作用域时(或被重新赋值)时,对象的引用计数就会减少。使用 sys.getrefcount()函数可以获得对象的当前引用计数。
多数情况下,引用计数比你猜测的要大很多。对于不可变数据(如数字和字符串),解释器会主动在程序的不同部分共享对象,便于节约内存。
当一个对象的引用计数为零时,就会被垃圾收集机制处理掉。但是一些情况下,很多已不使用的对象间可能存在循环依赖关系。
a = {}
b = {}
a['b'] = b
b['a'] = a
del a
del b
del会减少a和b的引用计数,并销毁用于引用底层对象的名称。然而因为每个对象都包含一个对其他对象的引用,所以引用计数不会归零,对象也不会销毁(导致内存泄漏),为解决这个问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除他们。
3.浅复制和深复制
浅复制将创建一个新对象,但它包含的是对原始数据对象中包含的项的引用。
>>a = [1,2,[3,4]]
>>b = list(a) #创建a的浅复制
>>b is a
False
>>b.append(100)
>>b
[1,2,[3,4],100]
>>a
[1,2,[3,4]]
>>b[2][0] = -100
>>b
[1,2,[-100,4],100]
>>a
[1,2,[-100,4]]
a和b是单独的列表对象,但他们包含的元素是共享的,因此修改a的一个元素也会修改b的对应元素
浙公网安备 33010602011771号