2017-01-27 17 views
0

私は、値が関数の引数として渡されたときに、Pythonが参照またはそれぞれの参照のコピーを扱っていたと思っていました。Pythonが配列の項目を参照する

私は次の例を試しましたが、トピックで少し読んだ後でも、もう理解できません。

import numpy as np 
import networkx as nx 

graph = nx.DiGraph() 
test = np.array([1, 1, 1], dtype=np.bool) 
graph.add_edge(1, 2, data=True) 
print graph[1][2]['data'] # shows True as expected 
graph[1][2]['data'] = test[0] 
print graph[1][2]['data'] # shows True as expected. Still fine 

test[0] = False 
print graph[1][2]['data'] # shows True instead of False 

偽を出力してはいけませんか?私は割り当てがgraph[1][2]['data']を指してtest[0]になると思った。しかし、それは実際にTrueFalseへの参照を使用しているようだと私は本当にpythonic割り当てを理解していないようです。

これは、配列の特定のエントリを指し示す方法や、これはPythonでは不可能ですか?配列の内容には関係ありませんか?

答えて

1

graph[1][2]['data'] = test[0]の場合、現在の値はtest[0]で、グラフに入れました。 test[0] = Falseを実行したとき、test [0]の値を異なる値を指すように変更しましたが、グラフは古い値を指していました。あなたはxのその値を変更し

x = 1 
y = x 
x = 2 
print y # will print 1 

ので、しかしyは古い値を参照:

あなたのケースの簡単な例をすることができます。 Pythonで(=を使用して)右辺の値を取り、それを左辺に配置しますが、あなたの場合はtest[0] = Falseの値を変更しなかった場合は、別の値で上書きします。

あなたが何かを変更し、それを共有したい場合、あなたは例えば、同じインスタンスを操作する必要があります。

class A(object): 
    def __init__(self): 
     self.x = 1 
y = A() 
lst = [] 
lst.append(y) 
y.x += 1 
print lst[0].x # will print 2 

値の変更がでそれにアクセスして表示されていたので、ここではAのインスタンスが共有されましたリスト

関連する問題