Python: 如何在赋值中保持变量内存位置?
我刚接触Python,所以如果这个问题很傻,请多包涵。我在谷歌上找不到答案……
我在代码中使用了PyFFTW,它有一个规划阶段,你需要传入两个变量(源和目标),也就是你要转换的内容。然后,当你调用FFT时,它会在这些变量在规划阶段所在的确切内存位置上进行操作。因此,对这些变量的任何操作都需要确保它们在内存中的位置不变。我发现了像*=
、+=
这样的运算符,它们可以做到这一点,适用于标准的数学运算符。
但是在我的程序中,我需要对变量应用一个函数,这个函数应该让它返回到同样的内存位置。该怎么做呢?
我最开始是用切片的方式来实现的:
a[:] = func(a)[:]
不过我刚意识到,这样做非常慢(我的代码速度慢了大约10%)。所以有没有人知道该怎么处理这个问题?
任何帮助都非常感谢。提前谢谢大家!
4 个回答
1
你的变量是可变类型,所以你的函数可以直接对它进行操作。
不过,你仍然不能使用那些会创建副本或者重新赋值的函数和运算符(这些你之前就不能用了),但是如果你在函数里直接修改这个变量,外面是可以看到这些变化的。
1
怎么样用本地变量来引用全局变量呢?我觉得这样可能会更快...
global a
a = []
def test():
global a
b = [1,2,3,4]
a = b
....
嗯...我也得用cProfiler来测试一下这个方法。
0
最后我没有找到一个令人满意的解决方案。最开始我使用了上面delnan提到的解决办法。
a[:] = func(a)[:]
我预先分配了一个固定大小的数组。抱歉把这个当作我的答案,因为我不知道怎么做或者是否可以把delnan的评论当作答案...