有人可以解释以下代码的行为吗?
import random
abc = ['a', 'b', 'c']
xyz = ['x', 'y', 'z']
def randomize(x):
random.shuffle(x)
x = x[0]
print('expected: ' + str(x))
return x
random_list = [abc, xyz]
for r in random_list:
r = randomize(x=r)
print('-----\n')
print('actual: ' + str(abc))
print('actual: ' + str(xyz))
如果我在for循环外运行代码,它将按预期运行:
abc = randomize(abc)
print('actual: ' + str(abc))
我希望返回值与函数中打印的内容匹配,但是事实并非如此。
答案 0 :(得分:1)
所以我们从random_list = [abc, xyz]
for r in random_list:
此时,r
是指列表abc
。
r = randomize(x=r)
r
现在指向一个从randomize
返回的新对象,它与abc
所指向的对象不同。
一种解决方法是
for i in len(random_list):
random_list[i] = randomize(random_list[i])
或
random_list = [randomize(r) for element in random_list]