これは完全な初心者からの質問です。次のコードがあります。
nb='([- ][0-9]*.[0-9]*E[-+ ][0-9]*)'
nb='([0-9,E.+-]+)'
nb
上書きされますか?それとも何か他のことをしますか?
nb
は 2 番目の文字列 にバインドされます'([0-9,E.+-]+)'
。したがって、最初の任務はもはや重要ではありません。nb
これは、以前に最初の文字列を指していた後、2 番目の文字列を指す名前にすぎないことに注意してください。文字列を変更するわけではありません。
より正確には、2番目の割り当ては、最初の文字列オブジェクトへの参照を2番目の文字列オブジェクトへの参照に置き換えます。
最初の文字列オブジェクトにはそれ以上の参照がないため、その時点またはおそらくしばらくしてからガベージコレクション(メモリの再利用)が行われます。
最初の代入は、'([- ][0-9]*.[0-9] E[-+ ][0-9] )' を含むメモリ内に str 型のインスタンスを作成します。
Python の文字列は不変であるため、2 番目の代入は最初の文字列を変更しません。メモリ内に '([0-9,E.+-]+)' を含む 2 番目の文字列インスタンスを作成します。
ある時点で、ガベージ コレクターはメモリから最初のインスタンスを消去します。これは、参照カウントがゼロになったためです (nb が別の文字列を指しているため、その文字列を参照する変数はもうありません)。