0

これは完全な初心者からの質問です。次のコードがあります。

nb='([- ][0-9]*.[0-9]*E[-+ ][0-9]*)'
nb='([0-9,E.+-]+)'

nb上書きされますか?それとも何か他のことをしますか?

4

3 に答える 3

5

nbは 2 番目の文字列 にバインドされます'([0-9,E.+-]+)'。したがって、最初の任務はもはや重要ではありません。nbこれは、以前に最初の文字列を指していた後、2 番目の文字列を指す名前にすぎないことに注意してください。文字列を変更するわけではありません。

于 2012-07-06T08:34:25.663 に答える
2

より正確には、2番目の割り当ては、最初の文字列オブジェクトへの参照を2番目の文字列オブジェクトへの参照に置き換えます。

最初の文字列オブジェクトにはそれ以上の参照がないため、その時点またはおそらくしばらくしてからガベージコレクション(メモリの再利用)が行われます。

于 2012-07-06T08:43:46.613 に答える
1

最初の代入は、'([- ][0-9]*.[0-9] E[-+ ][0-9] )' を含むメモリ内に str 型のインスタンスを作成します。

Python の文字列は不変であるため、2 番目の代入は最初の文字列を変更しません。メモリ内に '([0-9,E.+-]+)' を含む 2 番目の文字列インスタンスを作成します。

ある時点で、ガベージ コレクターはメモリから最初のインスタンスを消去します。これは、参照カウントがゼロになったためです (nb が別の文字列を指しているため、その文字列を参照する変数はもうありません)。

于 2012-07-06T08:39:16.977 に答える