ここでこのリストを検討してください。
example=[]
そしてもう一つ:
python=["hi","bye","hello","yes","no"]
Python から例に要素の 1 つを追加することにした場合、その要素 b の複製が作成されるか、変数 python が要素を失います。
example+=[python[0]]
したがって、文字列「hi」は、前述の例を使用して複製または例に転送されますか
ここでこのリストを検討してください。
example=[]
そしてもう一つ:
python=["hi","bye","hello","yes","no"]
Python から例に要素の 1 つを追加することにした場合、その要素 b の複製が作成されるか、変数 python が要素を失います。
example+=[python[0]]
したがって、文字列「hi」は、前述の例を使用して複製または例に転送されますか
文字列「hi」は文字に分割されexample、実行時に割り当てられますexample+=python[0]
したがってexample、この場合は が含まれます['h','i']。
また、リストpythonは要素を失いません。
いいえ、「譲渡」はありません。これは、操作後に値を出力するだけで簡単に確認できます。
代わりに、リストの例では、最初の文字列の要素が追加されます。
>>> f = []
>>> f+= ["hi", "there"][0]
>>> f
['h', 'i']
これは、a += bが と概念的に*同等a = a+bであり、のすべての要素の後にの要素が続くa+bリストを作成するために発生します。文字列はシーケンスであり、その要素は個々の文字で構成される文字列であるため、この動作が発生します。ab
*違いがありますが、特にそれは機能しlist + nonlistません。
Python リストには、要素への参照のみが格納されます。要素 (ここでは文字列) は外部オブジェクトとして格納されます。
Python 割り当ては、参照値のみをコピーします。このように、リストは参照を格納する動的配列として実装されます。
リストに文字列を挿入すると、ソース文字列オブジェクトはコピーされず、同じオブジェクトへの参照のみがコピーされます。ソース要素 (ここでは ) は、割り当ての右側で使用された場合python[0]、リストから削除されません。python読み取られるだけで、そのまま残されます。
では、文字列「こんにちは」は複製または転送されますか?
いいえ、文字列"hi"は複製も転送もされません。むしろ、バインド先のオブジェクトの長さがexample1 増加し、バインド先のexample[0]オブジェクトに参照python[0]がバインドされます。さらに、参照pythonもそれがバインドされているオブジェクトも変更されません。
また、質問の例にはエラーがあることに注意してください。実際に言ったところで、
example += python[0]
あなたは確かに言うつもりでした:
example += [python[0]]
次の example.append(python[0] を実行する必要があります。これにより、「hi」が取得され、例にコピーされます