Передача списка в качестве аргумента функции. Может кто-нибудь объяснить это поведение? - PullRequest
0 голосов
/ 04 ноября 2019
def test(lister):
    lister.append('why am i being shown in output?')

def pass_the_list():
    x = []
    test(x)
    print(x)

pass_the_list()

Вывод

['why am i being shown in output?']

Process finished with exit code 0

как передать строку как ссылку без возврата?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Список x передается как справочное значение, а не как значение, поэтому изменения, внесенные в функцию, сохранятся и после ее завершения.

1 голос
/ 04 ноября 2019

Вы можете передать строку в качестве ссылки, но это не имеет значения, потому что строка, в отличие от списка, является неизменной. Поэтому любое изменение строки приведет к созданию нового объекта.

test_string = 'Test my immutability'
test_string[0]='B'
>> TypeError: 'str' object does not support item assignment

Вы можете изменить строку, например, так (поместив ее в нечто изменяемое, например, список)

test_string = 'Test my immutability'

test_list = [test_string]


def reference_test(test_list):
    test_list[0]=test_list[0].replace('Test','Fest')

reference_test(test_list)

print(test_list)
>> ['Rest my immutability']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...