我可以为变量添加第二个名称吗?

Ski*_*man 1 python namespaces

我需要说服自己这是一个坏主意.我想为同一个变量分配第二个名称,其内容可能会发生变化.

A='Bob'
B=A #wrong function, I want to figure out something that works here.
A='Alice'
print A
print B
Run Code Online (Sandbox Code Playgroud)

我希望A和B都打印'Alice',而B打印'Bob',A打印'Alice'.

我为什么要这样做?在我的代码中,我使用一个名称来表示一些数据,这对于处理是有意义的,但是另一个名称对于用户输入是有意义的.argparse似乎想根据命令行选项分配变量名.所以我想在输入数据时使用一个名称,但在处理数据时使用另一个名称.我宁愿避免将一个复制到另一个,但那是我的后备位置.

Pau*_*sik 6

Python字符串是不可变的:

在Python中,字符串对象是不可变的 - 每次将字符串赋给变量时,都会在内存中创建一个新对象来表示新值.

维基百科关于不变性和特定Python示例的文档.

获得所需行为的一种简单方法是将字符串包装在类中:

class MyClass:
    SomeStr = "Any Val"

A = MyClass
A.SomeStr = "Bob"
B=A
B.SomeStr = "Alice"

print(A.SomeStr)
print(B.SomeStr)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> 
Alice
Alice
Run Code Online (Sandbox Code Playgroud)

所以现在你的B = A赋值创建一个"浅"副本......两个变量A和B指向同一个对象.

  • Python语义的这一点与对象im-/mutability的问题无关(尽管两者确实相互作用).但是,许多其他语言仍然缺乏明确的指针.在我的脑海中,对于Lisp,Lua,Java,**JavaScript(真的,Python在这里与JS相同),Ruby,C#的非"非安全"/"托管"子集(其中无论如何,大多数人都需要和使用).应该注意的是,可以使用具有单个字段的对象来相当容易地模拟指针指针.还应该注意的是,很少有任何惯用代码认为这是必要的;) (2认同)