在 Shelve 字典上循环时,Python 是否会丢弃上一次迭代中从内存中读取的 key:value 对?
Does Python discard the key:value pair read in previous iteration from the memory when looping on a Shelve dictionary?
我正在循环使用一个巨大的搁置字典来使用每个 key:value 对(不改变它)来做一些事情。虽然字典比内存大,但我担心这是否会 运行 超出内存。
示例代码:
dictFileName = 'dict.txt'
dict = shelve.open(dictFileName)
for key, value in dict.items():
# doing something using key and value
dict.close()
在循环的迭代中读取的 key:value 对是否会在下一次迭代时从内存中丢弃?我认为它必须,否则内存将被用完,因为循环基本上读取了整个字典,对吧?
一般来说,当通过
循环处理一个巨大的文件时
f = open('someFileName', 'r')
for each_line in f:
# do something
内存中的行会被下一次循环丢弃吗?
是的,在 for 循环的每次迭代开始时,键和值变量将被字典中的下一个键和值覆盖。
除非您对数据进行某些操作以防止其被垃圾收集(例如,将其存储在 for 循环之外定义的列表中),否则您的应用程序不会 运行 内存不足。
不再可达的对象使用的内存将被垃圾收集器回收,是的。所以你不会 运行 逐行读取文件内存不足。
我正在循环使用一个巨大的搁置字典来使用每个 key:value 对(不改变它)来做一些事情。虽然字典比内存大,但我担心这是否会 运行 超出内存。
示例代码:
dictFileName = 'dict.txt'
dict = shelve.open(dictFileName)
for key, value in dict.items():
# doing something using key and value
dict.close()
在循环的迭代中读取的 key:value 对是否会在下一次迭代时从内存中丢弃?我认为它必须,否则内存将被用完,因为循环基本上读取了整个字典,对吧?
一般来说,当通过
循环处理一个巨大的文件时f = open('someFileName', 'r')
for each_line in f:
# do something
内存中的行会被下一次循环丢弃吗?
是的,在 for 循环的每次迭代开始时,键和值变量将被字典中的下一个键和值覆盖。
除非您对数据进行某些操作以防止其被垃圾收集(例如,将其存储在 for 循环之外定义的列表中),否则您的应用程序不会 运行 内存不足。
不再可达的对象使用的内存将被垃圾收集器回收,是的。所以你不会 运行 逐行读取文件内存不足。