Python引用数组条目

时间:2017-01-27 17:55:52

标签: python-2.7

我曾经认为当值作为函数参数传递时,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]。但是它似乎实际上使用了对TrueFalse的引用,而我似乎并不真正理解pythonic赋值。

有没有办法让它指向数组的特定条目,或者在python中这是不可能的?而不是数组条目的内容?

1 个答案:

答案 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的实例,因此通过使用列表

访问它可以看到值的变化