Python数列变量修改我写了段程序,为什么我只想修改数列的一个值,但是每次已修改整列的值都被修改了.程序如下:strategy_do_nothing=['DoNothing']*2strategy = []treatment=['DoNothing','Minor','Major']if len(strate
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/18 00:39:46
Python数列变量修改我写了段程序,为什么我只想修改数列的一个值,但是每次已修改整列的值都被修改了.程序如下:strategy_do_nothing=['DoNothing']*2strategy = []treatment=['DoNothing','Minor','Major']if len(strate
Python数列变量修改
我写了段程序,为什么我只想修改数列的一个值,但是每次已修改整列的值都被修改了.程序如下:
strategy_do_nothing=['DoNothing']*2
strategy = []
treatment=['DoNothing','Minor','Major']
if len(strategy)
Python数列变量修改我写了段程序,为什么我只想修改数列的一个值,但是每次已修改整列的值都被修改了.程序如下:strategy_do_nothing=['DoNothing']*2strategy = []treatment=['DoNothing','Minor','Major']if len(strate
在Python里面是分为可变对象与不可变对象两类的.
对于你这个问题就是strategy_do_nothing是list,而list是可变对象,所以在strategy.append(strategy_do_nothing)之后,这个strategy里面你每次往里面追加的都是strategy_do_nothing这个对象(注意是这个对象或者说这个可变的变量.而不是['DoNothing']*2这个值),但是在后面的strategy[k][0]=treatment[k]当k = 0时,就是strategy[0][0]=treatment[0],此时strategy的strategy[0][0]就是strategy_do_nothing这个对象,你在这里对他赋值改变了他的值,那么在其他地方用到这个对象的时候也会改掉他的值,所以使得最终所有的strategy_do_nothing的地方都成为同样的东西了.
要解决这个方法:
strategy.append(strategy_do_nothing)改成strategy.append(strategy_do_nothing[:])
或者是用copy.deepcopy,或者Google一下"Python deep copy"、"Python 深拷贝"
PS:不知道你原意是要干嘛,如果要实现这个效果,为何不:
treatment = ['DoNothing','Minor','Major']
strategy_do_nothing = ['DoNothing'] * len(treatment)
strategy = zip(treatment,strategy_do_nothing)
print strategy
PS:你for k in range(len(treatment)):写的实在有点奇葩哈……