Параллельное изменение списков

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
15
8
Python:
def miniMax(arr):
    big = small = arr
    big.remove(min(arr))
    small.remove(max(arr))
    print(small, big, arr)
obj = [1,2,3,4,5]
miniMax(obj)

def andOne(num):
    num1 = num2 = num
    num += 1
    print(num1, num2, num)
obj2 = 5
andOne(obj2)
Output:
Код:
[2, 3, 4] [2, 3, 4] [2, 3, 4]
5 5 6
Почему это работает так?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Так происходит потому что списки в питоне копируются по ссылке, а числа по значению. Если немного изменить код, то можно копировать список по значению:
Python:
def miniMax(arr):
    big = small = arr[:]
    big.remove(min(arr))
    small.remove(max(arr))
    print(small, big, arr)

obj = [1,2,3,4,5]
miniMax(obj)
выведет
Python:
[2, 3, 4] [2, 3, 4] [1, 2, 3, 4, 5]
 

Форум IT Специалистов