このPythonコードビジュアライザーによると、Python文字列はヒープではなくスタックに割り当てられます。
どうしてこれなの?文字列がヒープに割り当てられるJavaに似ていると思いました。
このPythonコードビジュアライザーによると、Python文字列はヒープではなくスタックに割り当てられます。
どうしてこれなの?文字列がヒープに割り当てられるJavaに似ていると思いました。
回答:
そのビジュアライザーはスタック上の文字列データを表示していません。呼び出しスタックの一部として、ヒープデータへのローカル参照を示しています。これは、String
参照がString
ヒープ上の実際のオブジェクトを指すローカル変数であるJavaによく似ています。
ビジュアライザーは、気になるあらゆる種類の表現を単純化できます。Pythonの特定の実装で「Python文字列がスタックに割り当てられる」ことを意味するものではありません。
グレッグが彼の答えで言った、文字列はヒープに割り当てられています。
ビジュアライザーは「フレーム」部分にいくつかのオブジェクトを表示することを選択しましたが、これは私には間違っているようです。幸い、影響を受けるオブジェクト(int、string)は不変であるため、Pythonを学習している人にはほとんど影響がありません。したがって、影響についての推論はまだ可能です。
ただし、次のようなことをすると、メモリ内で文字列が複製されるという誤った印象を与えます。
x = "hello"
y = x