- case 1:
- a, b = SomeClass(), SomeClass()
- a.b, b.a = b, a
- case 2:
- lst = []
- lst.append(lst)
- case 3:
- self.handler = self.some_func
当然,大年夜家可能说,谁会这么傻,写出如许的代码,是的,膳绫擎的代码太明显,傍边间多几个层级之后,就会出现“借居”的轮回应用。在python的标准库 collections琅绫擎的OrderedDict就是case2:

要解决轮回引用,第一个办法是应用弱引用(weakref),第二个是手动解轮回引用。
第四:setcheckinterval
如不雅法度榜样肯定是单线程,那么修改checkinterval为一个更大年夜的值,这里有介绍。
第五:应用__slots__
slots最重要的目标是用来节俭内存,然则也能必定程度上进步机能。我们知道定义了__slots__的类,对某一个实例都邑预留足够的空间,也就不会再主动创建__dict__。当然,应用__slots__也有很多留意事项,最重要的一点,持续链上的所有类都必须定义__slots__,python doc有具体的描述。下面看一个简单的测试例子:
- class BaseSlots(object):
- __slots__ = ['e', 'f', 'g']
- class Slots(BaseSlots):
- __slots__ = ['a', 'b', 'c', 'd']
- def __init__(self):
- self.a = self.b = self.c = self.d = self.e = self.f = self.g = 0
- class BaseNoSlots(object):
- pass
- class NoSlots(BaseNoSlots):
- def __init__(self):
- super(NoSlots,self).__init__()
- self.a = self.b = self.c = self.d = self.e = self.f = self.g = 0
- def log_time(s):
- begin = time.time()
- for i in xrange(10000000):
- s.a,s.b,s.c,s.d, s.e, s.f, s.g
推荐阅读
于IT业内,大年夜数据之火热程度,似乎无出其右者。当然,在颇┞锋正爆发前夕,也应当合时泼盆冷水。谁能接触到数据国内冠以大年夜数据之名的企业数以千计,但细分其专注范畴,大年夜致可>>>详细阅读
本文标题:Python性能优化
地址:http://www.17bianji.com/lsqh/36589.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示