Pythonの文字列が不変の場合、なぜPythonでは次の操作が許可されますか?Pythonで文字列が不変の場合、なぜPythonで上書き操作が許可されるのですか?
a = 'Hello'
a = 'Hi'
Pythonの文字列が不変の場合、なぜPythonでは次の操作が許可されますか?Pythonで文字列が不変の場合、なぜPythonで上書き操作が許可されるのですか?
a = 'Hello'
a = 'Hi'
a
が文字列ではなく、正確に文字列に(お好みであれば、ポインタに類似)参照/ハンドルですので。メモリアドレスを確認して確認することさえできます。
>>> a = "hello"
>>> id(a)
140102378280544 # memory address (not exactly but that's irrelevant to the topic)
>>> a = 'hii'
140102388086864 # different memory address than before
Pythonの文字列は、1つの場所(ほとんど)に格納されているだけなので変更できません。したがって、変更することはできません。
>>> a = 'country'
>>> b = 'country'
>>> id(a) == id(b)
True
>>> a is b
True
私もこれを知っています。私の疑問は、Pythonの文字列が不変である場合、上書きされた操作が許可される理由を意味しますか?メモリレベルではどうなるのでしょうか?どのメモリがこの操作を担当していますか? – veneth
@venethまず、更新された回答を確認してください。新しい値を 'a'に代入すると、新しい値' hii'は 'hello'と同じメモリアドレスに格納されません。 Pythonの変数は、すでにデリファレンスされているポインタと似ています。ですから、面倒なことに言えば、 'aii 'に値' hii'を割り当てると、あるメモリアドレスに 'hii'を格納し、そのメモリアドレスの値を' a'に代入しています。 – hspandher
>>> a = 'Hello'
>>> id(a)
4519028800
>>> a = 'Hi'
>>> id(a)
4519896088
なく、同じ変数...私が言わなければならないのにid
の値はせいぜい示すものです。
リテラルをa
に再割り当てしようとすると、文字列は変更されません。文字列は同じままです。どのような変更参照はa
を指しています。
なぜあなたは 'id'値が唯一の指標であると言いますか? –
インタープリタセッションでは、同じ値を変数間で再利用することが可能です。 –
「a」は文字列ではないためです。それは文字列を参照する名前です。それは[再]/[un]バインドすることができます。 –
'a'はプロセス内で参照が変更されたことを確認します。 –
文字列は不変です。バインドされた名前は 'a'ではありません。 – deceze