5

コード:

>>> a = 1
>>> b = 2
>>> l = [a, b]
>>> l[1] = 4
>>> l
[1, 4]
>>> l[1]
4
>>> b
2

代わりに見たいのは、l[1] を 4 に設定すると、変数 b が 4 に変更されることです。

プリミティブを扱うとき、それらは参照ではなく値によってコピーされると思います。オブジェクトに問題があり、ディープ コピーなどを理解する必要がある人をよく見かけます。私は基本的に反対を望んでいます。プリミティブへの参照をリストに保存し、実際の変数名bまたはリスト内の参照を使用して、その変数に新しい値を割り当てることができるようにしたいと考えていますl[1]

これは可能ですか?

4

5 に答える 5

6

Python には「プリミティブ」はありません。すべてはオブジェクトであり、偶数です。Python の数値は不変オブジェクトです。そのため、「数値」への「変更」が複数の参照を通じて「見える」ように数値への参照を行うには、単一の要素リストまたは 1 つのプロパティを持つオブジェクトなどを通じて参照する必要があります。

(これは、リストとオブジェクトが変更可能であり、それらが保持する番号の変更は、それへのすべての参照を通じて見られるため、機能します)

例えば

>>> a = [1]
>>> b = a
>>> a
[1]
>>> b
[1]
>>> a[0] = 2
>>> a
[2]
>>> b
[2]
于 2013-05-23T01:48:50.240 に答える
5

Python では実際にはこれを行うことはできませんが、変数を作成して、不変の数値ではなく可変コンテナー オブジェクトを参照するaことで、それに近づくことができます。b

>>> a = [1]
>>> b = [2]
>>> lst = [a, b]
>>> lst
[[1], [2]]
>>> lst[1][0] = 4  # changes contents of second mutable container in lst
>>> lst
[[1], [4]]
>>> a
[1]
>>> b
[4]
于 2013-05-23T02:07:22.423 に答える
0

前に関連する議論がありました: あるリストの要素を別のリストに保存する - 参照によって - Python?

@mgilson によるとl[1] = 4、オブジェクトを変更しようとするのではなく、単に参照を置き換えるだけです。それにもかかわらず、タイプのオブジェクトはintとにかく不変です。

于 2013-05-23T01:54:09.447 に答える
0

l[0]オブジェクトを参照する名前a、およびa整数を参照する名前と考えてください。

整数は不変です。名前に別の整数を参照させることはできますが、整数自体を変更することはできません。

于 2013-05-23T02:01:35.587 に答える