私はもともとPythonが純粋な参照渡し言語であると考えました。Pythonリストと各アクセス(組み込みリストの検索/置換)
C/C++からはメモリ管理について考えることはできませんが、私の頭の中に置くのは難しいです。だから、私はそれをJavaの観点から考えて、プリミティブ以外のすべてを、参照渡しとして考えようとしています。
問題:ユーザー定義のクラスのインスタンスを含むリストがあります。
は、私が使用した場合のために、各構文、すなわち:for member in my_list:
print(member.str);
がmember
オブジェクトへの実際の参照の等価のですか?
i = 0
while i < len(my_list):
print(my_list[i])
i += 1
私は置き換えを行うに探していたときに、それが動作しないため、つまり、これは動作しません、それはないと思う::
それはやっての同等です
for member in my_list:
if member == some_other_obj:
member = some_other_obj
単純なリスト内での検索と置換。それはfor-eachループで行うことができますか?それ以外の場合は、ランダムアクセス構文(角括弧)を使用するだけで済むのですか、または動作しません。エントリを削除して新しいエントリを挿入する必要がありますか?私は:
i = 0
for member in my_list:
if member == some_other_obj:
my_list.remove(i)
my_list.insert(i, member)
i += 1
リストの反復中に値はコピーされません。理由は[オブジェクトが関数にパラメータとして渡されたときにオブジェクトがコピーされない理由]と似ています(http://stackoverflow.com/questions/575196/in-python-why-can-a-function-modify-some-arguments-発呼者によって知覚される - b)。 – jfs