Python的可迭代对象是否真的将所有值存储在内存中?

我正在阅读e-satis的答案,“ yield”关键字在Python中有什么作用?他说:

这些可迭代的方法很方便,因为您可以随意读取它们,但是您将所有值存储在内存中,当值很多时,这并不总是想要的

我真的不同意。但是我不能在那发表评论。

然后是这个问题:Python的可迭代对象是否真的将所有值存储在内存中?

我曾经这样认为。但是自从昨天看到Python的详细文档以来,我改变了看法。

>>> import sys
>>> def gen(): 
...   n = 0                                                                                          
...   while n < 10:                                                                                 
...     yield n                                                                                     
...     n += 1
...
>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> b = range(10)  # b is a range object, which is a iterable
>>> c = gen(10)    # c is a iterator, which is a iterable too
>>> sys.getsizeof(a)
144
>>> sys.getsizeof(b)
48
>>> sys.getsizeof(c)
72
>>> B = list(b)                                                                                     
>>> C = list(c)                                                                                     
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> B
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> C
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> sys.getsizeof(B)                                                                                
200                                                                                                
>>> sys.getsizeof(C)                                                                           
160

我们错误地认为Iterable将所有值存储在内存中,因为在使用Iterable时我们习惯于获取所有值。

我对吗?

邓肯

引用该答案时,您剥离了太多上下文。它是在诸如列表之类的可迭代对象的上下文中专门制作的。生成器和yield关键字在答案后面分别介绍。

扩大报价:

您可以在“ for ... in ...”上使用的所有内容都是可迭代的;列表,字符串,文件...

这些可迭代的方法很方便,因为您可以根据需要读取它们,但是您将所有值存储在内存中,当拥有很多值时,这并不总是想要的。

该声明对于列表和字符串是正确的,它们存储在内存中。但是,这对于文件来说是不正确的,因为您可以遍历文件而不将其全部存储在内存中。

可迭代的python可能会或可能不会将值存储在内存中。它一次浏览一个值,并且每一步都可以从内存中拉出该值,从头开始创建它,或者从另一个来源(例如文件)中读取它。

range()一个很好的例子:在Python 2.x中,它会预先生成所有值并将其存储在内存中;在Python 3.x中,它会根据需要生成它们。两者都返回一个可迭代的对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python的可迭代对象是否真的将所有值存储在内存中?

来自分类Dev

实例化对象时,所有对象是否都存储在内存中?

来自分类Dev

ResponseEntity <Stream <MyObject >>是否将所有内容存储在内存中?

来自分类Dev

Java对象是否共享方法在内存中的位置?

来自分类Dev

Java对象是否共享方法在内存中的位置?

来自分类Dev

Python将当前行存储在可迭代的文件对象中

来自分类Dev

nodejs加密模块,执行hash.update()将所有输入存储在内存中

来自分类Dev

是否可以在内存映射文件中存储python对象(特别是sklearn模型)?

来自分类Dev

csv.DictReader是否将文件存储在内存中?

来自分类Dev

Truecrypt是否将明文密码存储在内存中?

来自分类Dev

csv.DictReader是否将文件存储在内存中?

来自分类Dev

使用带有68HC11的Assembly将值存储在内存地址中

来自分类Dev

如何检查数组中的所有对象是否都包含相同的键和值?

来自分类Dev

Python标准库中的所有类似文件的对象是否都具有`name`属性?

来自分类Dev

在python中是否有任何可哈希的内置对象是可变的?

来自分类Dev

密码存储在内存中是否安全?

来自分类Dev

将数据存储在内存中,所有用户都可以访问asp.net mvc

来自分类Dev

像大多数示例一样,我在Python中的可迭代对象是否也应该是迭代器?

来自分类Dev

将联合存储在内存中

来自分类Dev

伴随对象是否在应用程序的生命周期中保留在内存中

来自分类Dev

如何使用Linq确定List <T>中的所有对象是否具有相同的属性值

来自分类Dev

Log4J 2是否可以将所有内容保存在内存中并按需输出?

来自分类Dev

将大量特定对象存储在内存中以便稍后筛选以查找特定对象的最佳实践?

来自分类Dev

是否有内置的Python函数,当将函数映射到可迭代对象时,该函数将返回第一个True-ish值?

来自分类Dev

jdbc数据集是否将所有行存储在jvm内存中

来自分类Dev

是否可以将对象保留在内存中以实现比Redis或Memcached更快的缓存存储?

来自分类Dev

JAVA:如何检查对象数组中的所有对象是否都是子类的对象?

来自分类Dev

在方法中返回可迭代对象是不好的做法吗?

来自分类Dev

核心数据NSInMemoryStoreType存储是否将整个图形存储在内存中,从而受到系统内存的严格限制?

Related 相关文章

  1. 1

    Python的可迭代对象是否真的将所有值存储在内存中?

  2. 2

    实例化对象时,所有对象是否都存储在内存中?

  3. 3

    ResponseEntity <Stream <MyObject >>是否将所有内容存储在内存中?

  4. 4

    Java对象是否共享方法在内存中的位置?

  5. 5

    Java对象是否共享方法在内存中的位置?

  6. 6

    Python将当前行存储在可迭代的文件对象中

  7. 7

    nodejs加密模块,执行hash.update()将所有输入存储在内存中

  8. 8

    是否可以在内存映射文件中存储python对象(特别是sklearn模型)?

  9. 9

    csv.DictReader是否将文件存储在内存中?

  10. 10

    Truecrypt是否将明文密码存储在内存中?

  11. 11

    csv.DictReader是否将文件存储在内存中?

  12. 12

    使用带有68HC11的Assembly将值存储在内存地址中

  13. 13

    如何检查数组中的所有对象是否都包含相同的键和值?

  14. 14

    Python标准库中的所有类似文件的对象是否都具有`name`属性?

  15. 15

    在python中是否有任何可哈希的内置对象是可变的?

  16. 16

    密码存储在内存中是否安全?

  17. 17

    将数据存储在内存中,所有用户都可以访问asp.net mvc

  18. 18

    像大多数示例一样,我在Python中的可迭代对象是否也应该是迭代器?

  19. 19

    将联合存储在内存中

  20. 20

    伴随对象是否在应用程序的生命周期中保留在内存中

  21. 21

    如何使用Linq确定List <T>中的所有对象是否具有相同的属性值

  22. 22

    Log4J 2是否可以将所有内容保存在内存中并按需输出?

  23. 23

    将大量特定对象存储在内存中以便稍后筛选以查找特定对象的最佳实践?

  24. 24

    是否有内置的Python函数,当将函数映射到可迭代对象时,该函数将返回第一个True-ish值?

  25. 25

    jdbc数据集是否将所有行存储在jvm内存中

  26. 26

    是否可以将对象保留在内存中以实现比Redis或Memcached更快的缓存存储?

  27. 27

    JAVA:如何检查对象数组中的所有对象是否都是子类的对象?

  28. 28

    在方法中返回可迭代对象是不好的做法吗?

  29. 29

    核心数据NSInMemoryStoreType存储是否将整个图形存储在内存中,从而受到系统内存的严格限制?

热门标签

归档