Это из-за Python порядка оценки и из-за того, что вы изменили список в середине этой оценки:
Для назначение, сначала оценивается RHS, слева направо:
# a = [1,2,3,4,5,6]
a[a.index(2)], a[a.index(1)] => 2, 1
Теперь LHS оценивается слева направо. Итак, сначала:
# a = [1,2,3,4,5,6]
a[a.index(1)] => a[0] = 2
# now a = [2,2,3,4,5,6]
Обратите внимание, что теперь ( first ) индекс 2
равен 0
!!!
Следующая оценка:
# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]
Таким образом, вы получите тот же список ...
Это также потому, что метод index()
возвращает:
индекс первого вхождения x в с
Для второго списка RHS оценивается так же, но тогда на LHS у вас есть:
# a = [2,1,3,4,5,6]
a[a.index(1)] => a[1] = 2
# now a = [2,2,3,4,5,6]
А теперь:
# a = [2,2,3,4,5,6]
a[a.index(2)] => a[0] = 1
# now a = [1,2,3,4,5,6]
Так что вроде все нормально ...