3

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

像这样的东西:

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

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

但是,我不太确定内存分配在 python 中是如何工作的。我读过 Python 很聪明,可以根据使用情况在堆栈和堆中分配变量。因此,我不能说:

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

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

4

1 回答 1

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
于 2017-01-26T06:28:50.947 回答