操纵包含大数据的变量

时间:2013-12-24 12:37:42

标签: python python-2.7 memory

在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()

1 个答案:

答案 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
相关问题