交换两元素时a, b= b, a,左边的接收的a, b不是并行赋值的,是从左到右串行赋值的。
a = [2, 3, 1, 0, 2, 5, 3]
# 场景: 交换下标为0和a[0]的两个元素, 即交换下标为0和2的两个元素
print("下标")
print(0, a[0])
print("取值")
print(a[0], a[a[0]])
a[0], a[a[0]] = a[a[0]], a[0]
print(a)
# 预期结果为 [1, 3, 2, 0, 2, 5, 3]
# 实际结果为 [1, 2, 1, 0, 2, 5, 3]
# 猜测:python在进行 a,b=b,a 赋值时, 首先把等式右边的b,a变成元组 t =(b,a),
# 在赋值过程中,对于左边的元素从左到右串行赋值,首先a = t[0] 然后 b = t[1]
# 其中 a = a[0], b =a[a[0]]; b的地址依赖了a的赋值结果,导致a被赋值后,b的地址改变了
# 检验
a = [2, 3, 1, 0, 2, 5, 3]
print("下标")
print(1, a[1])
print("取值")
print(a[1], a[a[1]])
a[1], a[a[1]] = a[a[1]], a[1]
print(a)
# 本来应该为 [2, 0, 1, 3, 2, 5, 3]
# 由于串行赋值,导致a影响b,实际预期为 [3, 0, 1, 0, 2, 5, 3],符合预期
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)