Python3.7变量更改另一个变量

时间:2019-01-27 03:56:17

标签: python python-3.x

我注意到一个变量在不被直接询问的情况下改变了它的值。在这段代码中,我更改了no_style变量的内容,但它也更改了yes_style的内容。为什么?

yes_style = no_style = basewidget.styleSheet().split(";")
yes_style[0] = "background-color: rgb(160, 200, 90)"
print(yes_style)
no_style[0] = "background-color: rgb(200, 0, 0)"
print(yes_style)
print(no_style)

这是照片:

['background-color: rgb(160, 200, 90)', 'color: rgb(50, 50, 50)', 'border: 1px solid rgb(100, 100, 100)', '']
['background-color: rgb(200, 0, 0)', 'color: rgb(50, 50, 50)', 'border: 1px solid rgb(100, 100, 100)', '']
['background-color: rgb(200, 0, 0)', 'color: rgb(50, 50, 50)', 'border: 1px solid rgb(100, 100, 100)', '']

更新:当然,一个简单的解决方法是:

base_style = sample.styleSheet().split(";")
# Yes style
yes_style = base_style
yes_style[0] = "background-color: rgb(160, 200, 90)"
yes_style = ";".join(yes_style)
# No style
no_style = base_style
no_style[0] = "background-color: rgb(200, 0, 0)"
no_style = ";".join(no_style)
print(yes_style)
print(no_style)

>>> background-color: rgb(160, 200, 90);color: rgb(50, 50, 50);border: 1px solid rgb(100, 100, 100);
>>> background-color: rgb(200, 0, 0);color: rgb(50, 50, 50);border: 1px solid rgb(100, 100, 100);

2 个答案:

答案 0 :(得分:1)

在Python中,名称只是对象的标签。当您像执行操作一样分配倍数时,您只是在为一个对象赋予不同的标签。如果更改一个,则基础对象也将更改,并在另一个对象中得到反映。

答案 1 :(得分:1)

您必须单独声明:

yes_style = basewidget.styleSheet().split(";")
no_style = basewidget.styleSheet().split(";")
yes_style[0] = "background-color: rgb(160, 200, 90)"
print(yes_style)
no_style[0] = "background-color: rgb(200, 0, 0)"
print(yes_style)
print(no_style)