1

C++ では、次のことができます。

int x = 10;
int &y = x;
y = 11;
cout << x << endl; // will print 11

Pythonで同様のことを行うにはどうすればよいですか? self.sessionへの参照を作成しようとしていますself.request.session:

self.session = self.request.session
4

2 に答える 2

7

以下は両方を作成し、同じオブジェクトを参照しますself.sessionself.request.session

self.session = self.request.session

2 つの参照のいずれかを介して に変更を加えるとsession、両方から変更を確認できます。

 self.session.set_foo(42)
 self.request.session.get_foo() # returns 42

一方、いずれかの参照を別の場所を指すように再バインドすると、リンクが壊れます。

 self.session = another_session

最後に、特定の Python 型は不変であることに注意することが重要です。これには、整数、文字列、およびタプルが含まれます。不変オブジェクトへの参照を複数持つことはできますが、不変であるため、そのオブジェクトを変更することはできません。

これは、C++ の例に照らして関連しています。への共有参照を持ち、intそれを変更できるようにしintたい場合は、 を可変オブジェクト内にラップし、int代わりにその可変オブジェクトへの参照を共有する必要があります。

于 2012-12-17T16:24:54.517 に答える
3

Python では、すべてがオブジェクトへの参照です。代入演算子は、右側で参照されるオブジェクトへの新しい参照を 作成します。

検討:

a = [1,2]
b = a
b.append(3)
print a  #prints [1, 2, 3]

サンプルコードは、self.request.sessionオブジェクトへの新しい参照を作成します。ただし、注意してください。名前に別の割り当てを行うと、のオブジェクトが参照self.requestされるようになることに注意してください。self.request

于 2012-12-17T16:24:36.260 に答える