2013-05-23 21 views
5

コード:Pythonのプリミティブ型への参照を格納しますか?

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

私が代わりに起こる見たいのは、私は4

に変数bが変更されたことを、4へ[1]等しいリットルを設定すると、私は時に推測しているということですプリミティブを扱う場合は、参照ではなく値によってコピーされます。多くの場合、オブジェクトに問題があり、ディープコピーなどを理解する必要がある人がいます。私は基本的に反対をしたい。 参照をリストのプリミティブに格納し、実際の変数名bまたはリストl[1]の参照を使用して、その変数に新しい値を割り当てることができるようにします。

これは可能ですか?

+0

あなたは '参照してL 'を持っています他の方法ではなく、「b」にします。 –

+0

この質問は非常に抽象的です。 Pythonが(あなたが知っているかもしれない他の言語と比較して)どのように動作するか、これを何かの解決策として使用しようとしているかについてもっと学びたいですか?どのような問題を解決しようとしていますか? – SingleNegationElimination

答えて

3

あなたは本当にPythonでそれを行うことはできませんが、変数を作ることによって近づくab代わりに不変番号の変更可能なコンテナオブジェクトを参照することができます。

>>> 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] 
+0

この答えとそれを上の方は、基本的に同じことをいろいろと言います...不変なものと私のための原始的な混乱をクリアしてくれてありがとう! – fdmillion

6

Pythonには「プリミティブ」はありません。すべてがオブジェクトであり、数字でもあります。 Pythonの数値は不変のオブジェクトです。したがって、 '番号'の '変更'が複数の参照を通じて '参照'されるような番号への参照を持つには、参照は、 1つの要素リスト、または1つのプロパティを持つオブジェクト。例えば

は、(リストやオブジェクトは変更可能であり、彼らが保持するものの数の変更は、それに対するすべての参照を通して見ているので、これは動作します)

>>> a = [1] 
>>> b = a 
>>> a 
[1] 
>>> b 
[1] 
>>> a[0] = 2 
>>> a 
[2] 
>>> b 
[2] 
0

私はこれが可能であるとは思わない:

>>> lst = [1, 2] 
>>> a = lst[1] # value is copied, not the reference 
>>> a 
2 
>>> lst[1] = 3 
>>> lst 
[1, 3] # list is changed 
>>> a # value is not changed 
2 

alst[1]の元の値を意味するが、直接それを参照していません。

0

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

整数は不変ですが、名前を異なる整数にすることはできますが、整数自体は変更できません。

関連する問題