更新列表中变量的值 - Python

时间:2018-01-25 15:32:40

标签: python

开发项目我在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"]

但是,输出与第一次相同?有人知道怎么解决吗?

2 个答案:

答案 0 :(得分:0)

参见图片变量与列表没有任何链接。

enter image description here

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"]

enter image description here

打印

  

['这是一个变量 - > ',['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中正在发生的事情的理解。我不建议使用此功能,至少不适合初学者。更好地接受在分配时复制字符串(至少在逻辑上),并找到一种方法来使用它来编写所需的内容。