Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在递归函数'中有一个列表;对内存/资源的影响_Python_Python 3.x_Recursion_Memory_Resources - Fatal编程技术网

Python 在递归函数'中有一个列表;对内存/资源的影响

Python 在递归函数'中有一个列表;对内存/资源的影响,python,python-3.x,recursion,memory,resources,Python,Python 3.x,Recursion,Memory,Resources,我是Python新手,我计划在递归函数中包含一个列表,例如 def myRecursion(a): A = [0,1,2] #Rest of code here myRecursion(a-1) 我的问题是,在递归中使用A是否会创建它的许多实例,并耗尽我的资源?我还应该注意,列表的内容总是相同的,这是一个简单的答案,带有一些示例计时:是的,在递归函数内部创建列表会影响性能,而不是在递归函数外部创建列表并传入 In [1]: def recursion1(n)

我是Python新手,我计划在递归函数中包含一个列表,例如

def myRecursion(a):

    A = [0,1,2]    

    #Rest of code here
    myRecursion(a-1)

我的问题是,在递归中使用
A
是否会创建它的许多实例
,并耗尽我的资源?我还应该注意,列表的内容总是相同的,这是一个简单的答案,带有一些示例计时:是的,在递归函数内部创建列表会影响性能,而不是在递归函数外部创建列表并传入

In [1]: def recursion1(n):
   ...:     A = [1,2,3]
   ...:     return n if n == 0 else recursion1(n-1)
   ...:

In [2]: %timeit recursion1(1000)
232 µs ± 7.84 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [3]: def recursion2(n, A):
   ...:     return n if n == 0 else recursion2(n-1, A)
   ...:

In [4]: A = [1,2,3]

In [5]: %timeit recursion2(1000, A)
163 µs ± 681 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
我的问题是,在递归中使用一个函数是否会创建它的许多实例

我们可以使用检查对象的标识:

In [6]: def recursion1(n):
   ...:     A = [1,2,3]
   ...:     print(id(A))
   ...:     return n if n == 0 else recursion1(n-1)
   ...:

In [7]: recursion1(3)
129035280
134141552
129297184
134141472
Out[7]: 0

In [8]: def recursion2(n, A):
   ...:     print(id(A))
   ...:     return n if n == 0 else recursion2(n-1, A)
   ...:

In [9]: recursion2(3, A)
133702400
133702400
133702400
133702400
Out[9]: 0

您是否以任何方式修改了A中的值?@Primusa否A中的内容将始终是相同的。您是否可以创建一个全局函数来实现您的功能access@Primusa我被教导尽可能避免使用全局变量,在程序中使用全局变量到底有多糟糕?