2012/12/06

自分のための「Pythonの文字数限界」

文系のための「文字列型」(1)を書いていて思ったことがある。
Python における文字列の「文字数限界」はいくつかという問題?
よく考えてみると、実際に確かめたことが無かった。

仕様にもちゃんと書いていない(?)。ということで実験。
1バイト文字の場合と2バイト文字の場合も検討してみる。
限界に達するほどの文字を扱ったことは無かったが考えてみると重要。

結論から言うと、半角英数の場合で「2^30=1,073,741,824」文字までいける。
日本語など全角文字の場合では「2^29=536,870,912」文字までいける。
これが十分かどうかは、何とも言えないが、ちょっとスッキリ。

以下が、ソースコード。実験1と実験2の二つのソースがある。

実験1:半角英数(1バイト文字)の場合

# 文字数「n」の初期値を設定する。
# 1文字から始めるので「n = 1」から。
n = 1

# エラーが出るまでひたすら実行する。
while True:
    # 変数「c」に文字「a」を「n」個入力する
    c = "a" * n
    # この時の「n」を表示する
    print n
    # 変数「a」に入力されている値を初期化する
    del c
    # 「n」を2倍して繰り返し処理を行う。
    n = n*2

実験2:全角文字(2バイト文字)の場合

# 文字数「n」の初期値を設定する。
# 1文字から始めるので「n = 1」から。
n = 1

# エラーが出るまでひたすら実行する。
while True:
    # 変数「c」に文字「a」を「n」個入力する
    c = "あ" * n
    # この時の「n」を表示する
    print n
    # 変数「a」に入力されている値を初期化する
    del c
    # 「n」を2倍して繰り返し処理を行う。
    n = n*2

実験1:半角英数(1バイト文字)の結果

1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
OverflowError: cannot fit 'long' into an index-sized integer


実験2:全角文字(2バイト文字)の場合


1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
OverflowError: repeated string is too long



1 件のコメント:

  1. 参考になりました!ありがとうございます

    返信削除