Я столкнулся с этой проблемой при попытке изучить python. Рассмотрим следующую функцию:
def swap0(s1, s2):
assert type(s1) == list and type(s2) == list
tmp = s1[:]
s1 = s2[:]
s2 = tmp
return
s1 = [1]
s2 = [2]
swap0(s1, s2)
print s1, s2
Что будут печатать s1 и s2?
После выполнения проблемы я обнаружил, что оператор печати будет печатать 1 2. Кажется, что значение s1 и s2 не изменилось из функции swap0
. Единственное объяснение, о котором я мог думать, было из-за линии.
tmp = s1[:]
Так как s1 [:] является копией, имеет смысл, что значение s1 не будет меняться в вызове функции. Однако, поскольку параметр swap0
равен (s1, s2), я не уверен, что после выполнения tmp = s1 [:]. Каждый раз, когда я делаю
s1 = something...
это будет ссылка на копию s1, а не на s1. Может ли кто-нибудь предложить лучшее объяснение? Спасибо.