在python中,哪种方式使用变量在速度,CPU,内存等方面更有效?

时间:2013-04-16 05:45:43

标签: python variables

假设我们有一个想要在objA的属性z上操作某些动作的函数。 objA是objB的属性,objB是objC等的属性......这两种方法中的哪一种更快?有什么不同吗?

方法1:对函数中的每个语句使用objC.objB.objA.z

方法2:在函数中分配像x这样的局部变量:

x=objC.objB.objA.z

然后对x进行操作,然后将输出分配给首选变量。

我知道方法2在编写实际代码方面更容易,但是没有定义新变量会花费更多内存吗?哪种方法更加pythonic,除了上述方法之外还有其他(更好)的方法吗?

2 个答案:

答案 0 :(得分:4)

方法2通常会更快,虽然它可能不会有明显的差异,除非它处于紧密循环中。

每次执行a.b.c.d时,Python都必须查找这些属性的值,即使它们在两次使用之间没有变化。如果为该值创建一次变量x,那么Python只需要查找一次属性,从而节省时间。

执行x = a.b.c.d 创建新对象,因此它不使用任何内存。 x将引用a.b.c.d指向的同一对象。但是,因此,您需要小心。任何变异x的操作都会影响原始对象。例如,如果a.b.c.d是列表,而您x = a.b.c.d,则x.append(1)将更改原始a.b.c.d对象的值。如果这是你想要的,那很好。如果没有,请务必明确复制该值。

答案 1 :(得分:2)

第二个更加pythonic,如果你多次重复使用objC.objB.objA.z它也会更快,因为它避免了每次都要进行4次查找。将此值绑定到x并不昂贵,Python只使用对该对象的相同引用而不会复制它。