我想知道覆盖变量是否会对python代码产生任何影响。 例如这两个代码(函数参数在两种情况下都是长字符串):
第一
def f(a):
b=a.encode('utf-8')
c=b[3:]
return c
和第二:
def f(a):
a=a.encode('utf-8')
a=a[3:]
return a
我认为在第一种情况下它将使用比第二种情况更多的内存。
答案 0 :(得分:0)
查看字节代码,似乎没有区别:
def f1(a):
b=a.encode('utf-8')
c=b[3:]
return c
def f2(a):
a=a.encode('utf-8')
a=a[3:]
return a
import dis
dis.dis(f1)
2 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (encode)
6 LOAD_CONST 1 ('utf-8')
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 STORE_FAST 1 (b)
3 15 LOAD_FAST 1 (b)
18 LOAD_CONST 2 (3)
21 LOAD_CONST 0 (None)
24 BUILD_SLICE 2
27 BINARY_SUBSCR
28 STORE_FAST 2 (c)
4 31 LOAD_FAST 2 (c)
34 RETURN_VALUE
dis.dis(f2)
7 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (encode)
6 LOAD_CONST 1 ('utf-8')
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 STORE_FAST 0 (a)
8 15 LOAD_FAST 0 (a)
18 LOAD_CONST 2 (3)
21 LOAD_CONST 0 (None)
24 BUILD_SLICE 2
27 BINARY_SUBSCR
28 STORE_FAST 0 (a)
9 31 LOAD_FAST 0 (a)
34 RETURN_VALUE
查看运行时间:
%timeit f1('x')
1000000 loops, best of 3: 547 ns per loop
%timeit f2('x')
1000000 loops, best of 3: 570 ns per loop
重复此操作时,值会有所不同,其中一个比其他值稍微快一点。所以没有区别。
%memit f1('x')
peak memory: 66.32 MiB, increment: 0.02 MiB
%memit f2('x')
peak memory: 66.28 MiB, increment: 0.04 MiB