そのため、先週、実験を実行して、高レベル言語であるにもかかわらず、次のように変数を割り当てるだけで変数のコピーを作成できることに気付きました。
a = 5
b = a
print(b) # 5
b = 3
print(b) # 3
print(a) # 5
...辞書を処理したり、場合によってはリストを同じように扱ったりすると、うまく行きません!先週、辞書が同じように機能すると考えて、コードにバグを作成しました。適切で詳細なコピーを作成するには、以下を実行する必要があることがわかりました。
b = dict(a)
とにかく、私はdatetimeオブジェクトで忙しくて、それらが整数であるかのようにそれらをあちこち操作しています、今これが大丈夫かどうかについて少し緊張し始めています。動作する場所と動作しない場所は少しall意的に思えますが、動作を確認するためだけに毎回実験を実行する必要がありますか?文字列はおそらく整数のように機能すると推測できますが、動作がどこで変わるかはわかりません。
誰かを見ることができます 尋ねられました this PHP but for Python datetimeオブジェクトの割り当ては適切で深いコピーであり、元の変数を誤って混乱させることはありません。
すべての datetime
モジュールで使用可能なタイプ はimmutableとして文書化されているため(クラスの文書化の直後に記載されています):
これらのタイプのオブジェクトは不変です。
これについて心配する必要はありません。
日時インスタンスの操作は新しいインスタンスを返すため、前のインスタンスを参照する他の名前には影響しません。
PM 2Ring 名前と値の仕組みに関する事実と神話 。これが混乱を明らかにするはずです。名前があります。
これについてarbitrary意的なことは何もありません。
Pythonのすべての割り当ては参照です。割り当て時にコピーは行われません。
オブジェクトを変更する能力がある場合、変更はそのオブジェクトへのすべての参照に自然に影響します。
元のコードの整数または文字列でこれが表示されない唯一の理由は、オブジェクトを変更せず、単に再割り当てするだけだからです。整数と文字列、および日時は、変更される方法がないため、できることはそれらを再割り当てすることだけです。リスト、辞書、または日時を再割り当てした場合、変更が他の参照に伝播されることもありません。