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

2024-10-06 12:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我

from file import variable

并且模块文件中的varable被更改,variable的值不会被更新。 如果我

^{pr2}$

变量file.variable已更新。在

有没有一种方法可以有选择地从模块中导入变量,将它们放在modules本地范围内并反映更新。在


Tags: 模块文件方法fromimportmodulesvariablefile
1条回答
网友
1楼 · 发布于 2024-10-06 12:39:11

不,在Python中,所有变量都是对象的引用(指针)。简单的赋值在中重新绑定被分配的名称会将它们指向不同的对象。也就是说,如果你有两个名字,a和{},它们指向同一个对象,比如42,然后将{}分配给另一个对象,比如"Don't Panic"a仍然指向{}。在

a = b = 42
b = "Don't Panic"
print a

不管涉及的名称是在同一个模块中还是在不同的模块中,这一点都是正确的。在

如果不希望出现这种情况,请不要为同一对象使用其他名称。正如您所发现的,您应该import file并以file.variable而不是from file import variable来访问它。后者相当于:

^{pr2}$

所以,在幕后,from ... import正在分配一个新的名称。名称与它已有的名称相同,但它在不同的范围内,是对对象的新引用。在

另一个可能的解决方案是使用可变对象,这样就不需要进行简单的赋值。例如,如果a是一个列表,那么您可以随意修改a[0]和{}等等,而不必更改a指向的内容。您甚至可以重新分配对象的整个内容,而不必重新绑定名称:a[:] = [1, 2, 3]。由于更改的是对象本身,而不是任何名称所指向的对象,因此可以通过任何名称看到更改。在

相关问题 更多 >