Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高python中指数字符串的效率_Python_Performance_Optimization_Memory - Fatal编程技术网

提高python中指数字符串的效率

提高python中指数字符串的效率,python,performance,optimization,memory,Python,Performance,Optimization,Memory,我一直在尝试用python制作一条龙曲线分形,我已经进行了32次迭代,但33次给了我一个内存错误。然而,我的电脑特别好,一台GE75 Raider 9SE,即使有32次迭代,一切都很好。我甚至可以运行3d建模软件 我正在使用64位python,还没有尝试分配更多内存或多交叉,我仍然想看看是否可以提高实际生成过程的效率。到目前为止,我的代码如下所示: old = 'r' new = old table = str.maketrans("lr", "rl")

我一直在尝试用python制作一条龙曲线分形,我已经进行了32次迭代,但33次给了我一个内存错误。然而,我的电脑特别好,一台GE75 Raider 9SE,即使有32次迭代,一切都很好。我甚至可以运行3d建模软件

我正在使用64位python,还没有尝试分配更多内存或多交叉,我仍然想看看是否可以提高实际生成过程的效率。到目前为止,我的代码如下所示:

old = 'r'
new = old
table = str.maketrans("lr", "rl")
iteration = 32

for i in range(iteration):
    new = (old) + ('r')
    old = "".join(old[::-1])
    old = old.translate(table)
    new = (new) + (old)
    old = new

我正在做的事情之一是多余的吗?我称之为低效的函数之一?在我探索更多选项之前,我想知道。我不再复制这个字符串,因此在这方面没有太多不必要的对象。

好吧,我不认为有太多的“低效”。。。对于你正在制作的ginormous字符串,只需要大量的内存

对于每一次迭代,字符串长度大约是原来的两倍,保存它所需的内存也是如此

在30次迭代中,字符串大约为1B个字符,需要大约1GB的RAM才能保存。(每个字符是一个字节)。您可以在循环结束时使用
old
上的
sys.getsizeof()
函数检查这一点。因此,从30到33次迭代是8的一个因数,这将得到8GB的RAM来保存结果,再加上在结果被垃圾收集之前的一段时间,它将同时保存
旧的
新的
,因此根据内部情况,可能会有一些额外的惩罚

您可以在网站上搜索扩展python虚拟机系统分配的方法,这可能会给您一些帮助,但最终,您真的需要超过1B个分形元素吗