开发项目我在Python中发现了一个奇怪的错误。 例如:
#Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
variable = "Hello_1"
list = ["This is a variable -> ",variable]
print list #-> ["This is a variable -> " , "Hello_1"]
现在,我将变量修改为新值。所以,我认为当改变变量的值时,我会在列表中看到新值
variable = "Hello_2"
print list #-> ["This is a variable -> " , "Hello_1"]
但是,输出与第一次相同?有人知道怎么解决吗?
答案 0 :(得分:0)
参见图片变量与列表没有任何链接。
str,int,float和tuple不可编辑。列表和字典是可编辑的。因此,如果您使用列表或字典而不是每次更改。
请参阅此示例使用列表而不是变量
variable = ["Hello_1"]
lis = ["This is a variable -> ",variable]
print lis #-> ["This is a variable -> " , "Hello_1"]
variable[0] = "Hello_2"
print lis #-> ["This is a variable -> " , "Hello_2"]
打印
['这是一个变量 - > ',['Hello_2']]
答案 1 :(得分:-1)
Python字符串是纯值,在分配时,它们是逻辑复制的。 (也许在内部,它使用一些写时复制功能更聪明地完成,但对于Python开发人员来说,它从未显示过。)
您想要的是对字符串的引用。这在Python中不存在。
您最接近它的方法是使用包含单个元素的列表。由于列表是通过引用复制的,因此可以模拟您的预期:
variable = ["Hello_1"]
list = ["This is a variable -> ",variable]
print list #-> ["This is a variable -> " , ["Hello_1"]]
variable[0] = "Hello_2" # assign to element of list
print list #-> ["This is a variable -> " , ["Hello_2"]]
但是,拜托,因为这很难理解代码并且远非Pythonic,所以我发布这个仅仅是为了提高对Python中正在发生的事情的理解。我不建议使用此功能,至少不适合初学者。更好地接受在分配时复制字符串(至少在逻辑上),并找到一种方法来使用它来编写所需的内容。