我曾经认为当值作为函数参数传递时,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
不应该打印False吗?我认为该分配会使graph[1][2]['data']
指向test[0]
。但是它似乎实际上使用了对True
和False
的引用,而我似乎并不真正理解pythonic赋值。
有没有办法让它指向数组的特定条目,或者在python中这是不可能的?而不是数组条目的内容?
答案 0 :(得分:1)
当您graph[1][2]['data'] = test[0]
时,您获取了test[0]
的当前值并将其放入图表中。
当您执行test[0] = False
时,您将test [0]的值更改为指向不同的值,但图表指向旧值。
您的案例的简化示例可以是:
x = 1
y = x
x = 2
print y # will print 1
由于您更改了x
的值,但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的实例,因此通过使用列表
访问它可以看到值的变化