2022年 11月 8日

python内存分配_如何在Python中动态分配内存

python中的“new”等价于使用构造函数,例如:new_list = list() # or [] – expandable heterogeneous list

new_dict = dict() # expandable hash table

new_obj = CustomObject() # assuming CustomObject has been defined

既然你是从C移植过来的,有些事情需要注意。

python中的所有内容都是一个对象,包括整数,大多数变量只是引用,但是对于标量变量(如整数和字符串)的规则与容器不同,例如:a = 2 # a is a reference to 2

b = a # b is a reference to ‘a’

b = 3 # b now points to 3, while ‘a’ continues to point to 2

但是:alist = [‘eggs’, 2, ‘juice’] # alist is reference to a new list

blist = alist # blist is a reference; changing blist affects alist

blist.append(‘coffee’) # alist and blist both point to

# [‘eggs’, 2, ‘juice’, ‘coffee’]

如果愿意的话,可以预先分配大小,但这通常不会给python带来多大好处。以下内容有效:new_list4k = [None]*4096 # initialize to list of 4096 None’s

new_list4k = [0]*4096 # initialize to 4096 0’s

big_list = []

big_list.extend(new_list4k) # resizes big_list to accomodate at least 4k items

如果要确保不会发生内存泄漏,请尽可能频繁地使用局部变量(例如,在函数中),以便在超出范围时不必担心。

为了高效的矢量化操作(和更低的内存占用),使用numpy数组。import numpy as np

my_array = np.zeros(8192) # create a fixed array length of 8K elements

my_array += 4 # fills everything with 4

我加了两分钱:

我可能会先问你的主要目标是什么。在试图优化程序执行速度或最小内存占用时,有一些python方法。然后是努力在尽可能短的时间内移植一个程序。有时它们都是交叉的,但更多的时候,你会发现pythonic的方法是快速翻译,但有更高的内存要求。从python中获得更高的性能可能需要集中精力的体验。

祝你好运!