Python中对同一变量的多个引用

Python中对同一变量的多个引用,python,dictionary,Python,Dictionary,我试图用不同的方法访问同一个变量。我有一堆存储在dict中的对象,所以我可以对它们进行迭代。但偶尔,我想直接访问它们(不必查看dict中的结构…) 我可以把两点指向内存中的同一个对象吗?因此,如果我在object1中更改了某些内容,那么该更改将出现在字典中。我在python命令行中执行了此操作: object1 = 5 someDict = {} someDict[1] = object1 print(someDict[1]) # output: 5 object1 = 6 print(so

我试图用不同的方法访问同一个变量。我有一堆存储在dict中的对象,所以我可以对它们进行迭代。但偶尔,我想直接访问它们(不必查看dict中的结构…)


我可以把两点指向内存中的同一个对象吗?因此,如果我在object1中更改了某些内容,那么该更改将出现在字典中。

我在python命令行中执行了此操作:

object1 = 5
someDict = {}
someDict[1] = object1

print(someDict[1])
# output: 5

object1 = 6
print(someDict[1])
# output: 5

如果在分配了
someDict[1]
后更改
object1
,则
someDict
不会更改。

下面是一个演示它工作原理的小示例:

>>> object1 = []
>>> someDict = {}
>>> someDict[1] = object1
>>> someDict[1].append('foo')
>>> object1.append('bar')
>>> print(object1 is someDict[1])
True
>>> print(object1)
['foo', 'bar']
>>> print(someDict[1])
['foo', 'bar']
当然,如果使用赋值,您将指向不同的对象:

>>> object1 = ['baz']
>>> print(object1 is someDict[1])
False
>>> print(object1)
['baz']
>>> print(someDict[1])
['foo', 'bar']

提供的代码可以工作(假设object1是可变的)。将创建对对象的两个引用,一个在
someDict
中,一个在
object1
中。修改一个将修改另一个。但是,为其中一个指定新值将断开链接。重要的单词是可变的。例如,如果
object1
是一个字符串,答案就会不同,因为字符串在Python中是不可变的。您可以验证两个对象是否与
id
函数(以及
is
语句)相同。Ned Batchelder(给我们带来
覆盖范围的人)在python引用相同对象和不引用相同对象时给出了一个非常好的解释。希望这有帮助!因此,假设object1有一个方法可以更改一个可以正常工作的参数,但是拥有类似object1=somethingnew的东西会破坏链接。对吗?字符串是不可变的。无论如何,
object1='bar'
从不尝试更改任何对象,而只是将变量指向不同的对象。
>>> object1 = ['baz']
>>> print(object1 is someDict[1])
False
>>> print(object1)
['baz']
>>> print(someDict[1])
['foo', 'bar']