在不分配新对象的情况下填写具有特定值的列表片

时间:2017-01-25 18:27:44

标签: python memory memory-management micropython

有没有办法通过切片修改python列表只有一个没有内存分配的值?

类似的东西:

b = range(10)
b[2:5] = 1

这里的问题是关于记忆的问题。我不想分配新对象,因为我在嵌入式系统上使用MicroPython,不必要的分配会影响性能。那么我应该使用循环还是有更优雅的方式?

但是,我不确定内存分配在python中是如何工作的。我已经读过Python很聪明,并根据它们的用法在堆栈和堆中分配变量。所以我不能说是否:

b = range(10)
b[2:5] = [1]*3

将为垃圾收集器创建一些工作。

1 个答案:

答案 0 :(得分:0)

向MicroPython开发人员询问这一点自然会更好。所以我做了这件事并揭示了许多有趣的事情。

b[2:5] = [1]*3

确实分配了新对象。 甚至

for i in range(x, y):
    b[i] = 1

通过range调用分配内存。虽然我期望这个案例被单独处理以优化代码。特别是如果我们谈论嵌入式系统的python。

因此,我认为最有效的方法是使用while周期。

x = x1
while x < x2:
    b[x] = 1
    x += 1