覆盖Python中的变量

时间:2016-01-20 21:41:28

标签: python

我想知道覆盖变量是否会对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

我认为在第一种情况下它将使用比第二种情况更多的内存。

1 个答案:

答案 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