在不分配新对象的情况下用特定值填充列表的一部分
Fill in a slice of a list with certain value without allocating new objects
有没有什么方法可以在不分配内存的情况下通过切片修改 python 列表,只有一个值?
类似的东西:
b = range(10)
b[2:5] = 1
这里的问题是关于内存的。我不想分配新对象,因为我在嵌入式系统上使用 MicroPython,不必要的分配会影响性能。那么我应该使用循环还是有更优雅的方法?
但是,我不太确定 python 中的内存分配是如何工作的。我读过 Python 很聪明,可以根据用途在堆栈和堆中分配变量。因此我不能说如果:
b = range(10)
b[2:5] = [1]*3
将为垃圾收集器创建一些工作。
问 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
有没有什么方法可以在不分配内存的情况下通过切片修改 python 列表,只有一个值?
类似的东西:
b = range(10)
b[2:5] = 1
这里的问题是关于内存的。我不想分配新对象,因为我在嵌入式系统上使用 MicroPython,不必要的分配会影响性能。那么我应该使用循环还是有更优雅的方法?
但是,我不太确定 python 中的内存分配是如何工作的。我读过 Python 很聪明,可以根据用途在堆栈和堆中分配变量。因此我不能说如果:
b = range(10)
b[2:5] = [1]*3
将为垃圾收集器创建一些工作。
问 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