如果我
from file import variable
并且模块文件中的varable
已更改,variable
的值未更新。
如果我
import file
变更file.variable
已更新。
是否有办法从模块中有选择地导入变量,将它们放在模块的本地范围内并反映更新。
答案 0 :(得分:6)
没有。在Python中,所有变量都是对象的引用(指针)。 中的简单赋值重新绑定所分配的名称 - 它们将它们指向不同的对象。也就是说,如果您有两个名称a
和b
,指向同一个对象,请说42
,并将b
指定给其他对象,请说{ {1}},"Don't Panic"
仍然指向a
。
42
无论涉及的名称是在同一个模块中还是在不同的模块中,都是如此。
如果您不想要此行为,请不要为同一对象使用其他名称。如您所见,您应该a = b = 42
b = "Don't Panic"
print a
并以import file
而不是file.variable
的身份访问它。后者相当于:
from file import variable
因此,在引擎盖下,import file
variable = file.variable
del file
正在分配一个新名称。该名称与其已有的名称相同,但它位于不同的范围内,是对该对象的新引用。
另一种可能的解决方案是使用可变对象,这样您就不需要进行简单的分配。例如,如果from ... import
是一个列表,那么您可以修改a
和a[0]
等等,而无需更改a[2]
指向的内容。您甚至可以重新分配对象的整个内容,而无需重新绑定名称:a
。由于您正在更改对象本身,而不是任何名称所指向的对象,因此可以通过任何名称查看更改。