gpt4 book ai didi

Python - 函数参数值更改

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:24 24 4
gpt4 key购买 nike

我是 Python 的新手,在尝试编写替换函数时遇到了问题。目的是显示一个列表,然后显示一个字符被改变的同一个列表。

用于调用该函数的代码是:

str_list = ['s', 'h', 'r', 'u', 'g', 'g', 'e', 'd']

print("\nreplace Test")
new_str = list_function.replace(str_list, 'g', 'z')
print(list_function.to_string(str_list))
print(list_function.to_string(new_str))

new_str = list_function.replace(str_list, 'a', 'y')
print(list_function.to_string(new_str))

定义函数的代码是:

def replace(my_list, old_value, new_value):
new_list = my_list
for k in range(0, length(new_list)):
if new_list[k] == old_value:
new_list[k] = new_value
return my_list

但是当我运行程序时,输出是:

replace Test
s, h, r, u, z, z, e, d
s, h, r, u, z, z, e, d
s, h, r, u, z, z, e, d

我只想修改第二个列表,我运行了调试器并发现 str_listnew_list 都被修改了,但我只是无法弄清楚我做错了什么。任何帮助将不胜感激。

最佳答案

当你这样做的时候

new_list = my_list

您不是在复制列表,而是将引用分配给新变量。你需要的是

new_list = my_list[:]

my_list[:] 实际上在内存中创建了一个新副本。有了这个改变,程序产生

replace Test
s, h, r, u, g, g, e, d
s, h, r, u, g, g, e, d
s, h, r, u, g, g, e, d

您可以在 CPython 中使用 id 确认是否正在创建新副本。

new_list = my_list
print id(new_list), id(my_list)

将打印相同的地址两次,这意味着它们都指向同一个元素。

new_list = my_list[:]
print id(new_list), id(my_list)

将打印两个不同的地址。

关于Python - 函数参数值更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com