Почему эти рекурсивные функции используют одинаковый объем памяти?
Я не могу понять, почему функция f1 использует тот же объем памяти, что и функция f2:
from memory_profiler import memory_usage
class BigObject(object):
def __init__(self):
self.value = "a"*1000000
a = []
def p1(n):
if n == 0:
return
a.append(BigObject())
p1(n-1)
a.pop()
def p2(n, p):
if n == 0:
return
p2(n-1, p + [BigObject()])
def f1():
p1(200)
def f2():
p2(200, [])
mem_usage = memory_usage(f1)
print('Memory usage (in chunks of .1 seconds): %s' % mem_usage)
print('Maximum memory usage of f1: %s' % max(mem_usage))
mem_usage = memory_usage(f2)
print('Memory usage (in chunks of .1 seconds): %s' % mem_usage)
print('Maximum memory usage of f2: %s' % max(mem_usage))
Выход:
Memory usage (in chunks of .1 seconds): [28.2421875, 28.55078125, 57.859375, 88.734375, 119.375, 150.7890625, 182.2109375, 213.62890625, 64.45703125, 28.2421875]
Maximum memory usage of f1: 213.62890625
Memory usage (in chunks of .1 seconds): [152.25390625, 152.25390625, 152.25390625, 152.25390625, 152.25390625, 152.25390625, 152.25390625, 177.328125, 209.73046875, 151.296875]
Maximum memory usage of f2: 209.73046875
Я думал, что, поскольку p2 постоянно создает временные списки из-за оператора "+", который создает новый список при каждом вызове функции, несомненно, он должен использовать больше памяти по сравнению с p1, который изменяет только один список, но это не было создано наблюдение.
В чем дело?