从文件导入变量创建变量的副本

时间:2013-04-17 19:59:54

标签: python python-import

如果我

from file import variable

并且模块文件中的varable已更改,variable的值未更新。 如果我

import file

变更file.variable已更新。

是否有办法从模块中有选择地导入变量,将它们放在模块的本地范围内并反映更新。

1 个答案:

答案 0 :(得分:6)

没有。在Python中,所有变量都是对象的引用(指针)。 中的简单赋值重新绑定所分配的名称 - 它们将它们指向不同的对象。也就是说,如果您有两个名称ab,指向同一个对象,请说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是一个列表,那么您可以修改aa[0]等等,而无需更改a[2]指向的内容。您甚至可以重新分配对象的整个内容,而无需重新绑定名称:a。由于您正在更改对象本身,而不是任何名称所指向的对象,因此可以通过任何名称查看更改。