在python中,哪一种使用变量的方式在速度、cpu、内存等方面更有效



假设我们有一个函数想对objA的属性z进行一些操作。objA是objB的属性objB是objC的属性等等…这两种方法哪一种更快?有什么区别吗?

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

方法2:将函数中的局部变量(如x)赋值为:

x=objC.objB.objA.z

然后对x进行操作,然后将输出赋值给合适的变量。

我知道方法2在编写实际代码方面更容易,但是定义一个新的变量不需要更多的内存吗?哪种方法更python化?除了上述方法之外,还有其他(更好的)方法吗?

方法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对象的值。如果这是你想要的,很好。如果没有,请确保显式复制该值。

第二个更python化,如果你多次重用objC.objB.objA.z,它也会更快,因为它避免了每次都要做那4次查找。将此值绑定到x的代价并不高,Python只是对对象使用相同的引用,而不会复制它。

最新更新