gpt4 book ai didi

python - 函数内局部变量的生命周期(内存范围)

转载 作者:IT老高 更新时间:2023-10-28 20:41:40 26 4
gpt4 key购买 nike

def some_function():
some_dict = {'random': 'values'}
a = some_dict['random']
return a
  1. 字典some_dict是什么时候在内存中创建的? (第一次调用函数?)

  2. 字典 some_dict 何时销毁/解除分配? (函数什么时候返回?)

如果是这样,是否意味着每次调用函数时都会创建字典对象?

  1. 在学习/处理python的时候需要担心这些事情吗?

    • 处理此类情况的最佳做法是什么?是不是最好全局创建字典,避免每次调用函数时创建和销毁字典?
  2. 我在哪里可以了解这种语言的详细信息?我尝试查看文档,但找不到我要查找的内容。

如果您能回答上述所有 4 个问题,我们将不胜感激!

最佳答案

  1. 每次调用函数时,都会在内存中创建字典 some_dict
  2. 函数返回时释放。
  3. 每次调用函数时都重新创建字典确实很昂贵,尤其是在字典很大的情况下。您可以改为在调用者函数中创建字典(假设调用者本身只被调用一次)并将其作为参数传递给函数 some_function()

例如,考虑函数 caller() 调用函数 callee (some_function() 在你的问题),如

def caller():
callee()

从你的用例来看,我们要多次调用callee(),我们需要在callee()中复用同一个字典。让我们来看看正常的使用案例。

1.字典在callee()中生成。这是您问题中的示例。

def caller():
for loop:
callee()

def callee():
generate dictionary
do something with dictionary

在这种情况下,每次调用 callee() 时,您都必须生成一个新字典。这是因为一旦 callee() 返回,它的所有局部变量都会被释放。因此,您不能在不同的 callee() 之间“重用”同一个字典。

2.字典在caller()中生成,并作为参数传递给callee()

def caller():
generate dictionary
for loop:
callee(dictionary)

def callee(dictionary):
do something with dictionary

在这种情况下,您将在 caller() 中生成一次字典,然后将其传递给每个单独的 callee() 函数。因此,每次调用 callee() 时,都不需要重新生成字典。

字典是通过引用传递的,因此每次调用 callee() 时都不会传递庞大的数据结构。我不会对此进行深入讨论(您可以找到一个很好的解释 here),但本质上,将字典作为参数传递给 callee() 的成本可以忽略不计。

关于python - 函数内局部变量的生命周期(内存范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34430314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com