私はWhat does the "yield" keyword do in Python?にe-satisの答えを読んでいました。そして、彼は言った:あなたがそれらをあなたが望む限り多くを読むことができるので、Pythonのiterablesは実際にすべての値をメモリに格納しますか?
これらのイテレート可能オブジェクトは便利ですが、あなたは、メモリ内のすべての値を格納し、値
の多くを持っている場合、これはあなたが望むものを常にではありません
私は本当に同意しません。しかし、私はそこにコメントすることはできません。
次に、この質問が続きます。Pythonのiterableは実際にすべての値をメモリに格納していますか?
私はそう思っていました。しかし、私は昨日、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
我々は反復可能なを使用している場合、すべての値を取得するために使用されているので、私たちは誤って、反復可能な店舗にメモリ内のすべての値を考えます。
私は正しいですか?
その答えの中の「これらのiterables」とは、一般的にiterablesではなく、それらのリストを意味するポスターだと思います。リストはその値をメモリに格納しますが、反復可能性は必ずしも必要ではありません。 –
あなたが引用した段落は、後で述べるもの(発電機のようなもの)ではなく、前に述べたiterablesを参照しています。 – molbdnilo