在python中,我使用变量来存储大量数据 - 大约1GB。我对这些数据进行了各种操作,包括截断它。我还需要跨多个函数执行这些操作 - 截断等,即。在我看来,这是对全局变量的合法使用,因为在函数之间传递变量作为局部变量会涉及内存中的重复,因此速度较慢。由于数据不是一个恒定的长度,我也很难将变量分解成更小的块。
有人可以告诉我,如果使用全局变量是正确的方法吗?还是有更好的方法?
这里有一些基本的示例代码供参考:
fp = open(filename, 'rb')
bytes = fp.read(1000000000)
def ops1():
global bytes
parsed = {}
i = 0
while len(bytes):
parsed[i] = bytes[ : 400]
bytes = bytes[400 :] # truncate
parsed[i + 1] = ops2()
i += 2
...more truncating and parsing...
def ops2():
global bytes
...more truncating and parsing...
ops1()
答案 0 :(得分:3)
Python传递引用;参数和局部变量,只要你不创建大的新本地值(通过重新绑定或复制),本地与全局使没有区别。
除非您明确地首先创建副本然后将 传递给函数,否则函数肯定永远不会传递值的新副本。
为您的函数设置bytes
而不是使用全局会对内存使用没有影响,但将取消引用名称更快(永远(稍微)。
由于bytes
是一个列表,您可以随时将其操作;您可以直接从中删除索引,或者指定身份切片不重新绑定,但缩小列表本身:
del bytes[:400] # remove first 400 elements
或
bytes[:] = bytes[400:] # replace *all* indices in `bytes` with everything but the first 400