ここでこのリストを検討してください。
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
リストを作成するために発生します。文字列はシーケンスであり、その要素は個々の文字で構成される文字列であるため、この動作が発生します。a
b
*
違いがありますが、特にそれは機能しlist + nonlist
ません。
Python リストには、要素への参照のみが格納されます。要素 (ここでは文字列) は外部オブジェクトとして格納されます。
Python 割り当ては、参照値のみをコピーします。このように、リストは参照を格納する動的配列として実装されます。
リストに文字列を挿入すると、ソース文字列オブジェクトはコピーされず、同じオブジェクトへの参照のみがコピーされます。ソース要素 (ここでは ) は、割り当ての右側で使用された場合python[0]
、リストから削除されません。python
読み取られるだけで、そのまま残されます。
では、文字列「こんにちは」は複製または転送されますか?
いいえ、文字列"hi"
は複製も転送もされません。むしろ、バインド先のオブジェクトの長さがexample
1 増加し、バインド先のexample[0]
オブジェクトに参照python[0]
がバインドされます。さらに、参照python
もそれがバインドされているオブジェクトも変更されません。
また、質問の例にはエラーがあることに注意してください。実際に言ったところで、
example += python[0]
あなたは確かに言うつもりでした:
example += [python[0]]
次の example.append(python[0] を実行する必要があります。これにより、「hi」が取得され、例にコピーされます