もちろん、無限ではありません。私はニーズのハイライトがあると考えているドキュメントからキーセンテンス:
[...]機能は、その後、[(末尾の改行をストリッピング)は、文字列に変換し、入力から行を読み込み... ]
(強調鉱山)
それはにユーザーが指定する入力を変換するためのPythonstr
オブジェクトは、本質的に変換:「は、そのサイズはがPythonが作成できる最大の文字列以下である必要があります。 "
明示的なサイズが指定されていない理由は、これが実装の詳細なのかもしれないからでしょう。 Pythonの他のすべての実装に最大サイズを適用することはあまり意味がありません。
*少なくとも、文字列の最大サイズは、のインデックスがどれくらい大きいかによって制限されます(PEP 353参照)。 (つまり、正の許容限度、-2 ** 63
が負の限界でだ、2 ** 63 - 1
と前回を試してみてください。)
>>> s = ''
>>> s[2 ** 63]
IndexErrorTraceback (most recent call last)
<ipython-input-10-75e9ac36da20> in <module>()
----> 1 s[2 ** 63]
IndexError: cannot fit 'int' into an index-sized integer
:それはあなたがそれを試してみて、インデックス時にカッコ[]
内の数字があることを許可されてどのように大きな、あります
インデックスの場合、内部的に使用されるのはPython番号ではありません。代わりに、それはそれぞれ32/64ビットマシン上で符号付き32/64ビット整数であるPy_ssize_t
です。それは、それが見えるものからの厳しい限界です。
(エラーメッセージ状態、INTとインテックスサイズの整数は、2つの異なるものであるように)
供給された入力がPY_SSIZE_T_MAX
(Py_ssize_t
の最大サイズ)より大きい場合またinput()
explicitly checksのように思えます変換前:
if (len > PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
"input: input too long");
result = NULL;
}
が、それはPyUnicode_Decode
とPythonのstr
に入力を変換します。
あなたのためにそれを視点に入れます。平均本は500.000
文字の長さや書籍の合計数のestimationは約1.3億である、あなたは理論的には周りのinput
できれば:
>>> ((2 ** 63) - 1) // 500000 * 130000000
141898
回これらの文字。しかし、おそらくあなたには時間がかかります:-)(利用可能なメモリによって制限されることがあります)
関連:http://stackoverflow.com/q/1739913/5647260 – Li357
「*多くのコピー貼り付けを使用した後」* [リダイレクトスタンダード]を試してみましたか(http://stackoverflow.com/a/15680903/1013719)? –
私は@ RyanHainingに感謝していませんでした! – user6774416