我学python已经有一段时间了,但它一直让我吃惊。
我有以下代码:
def update_list(input_list):
input_list.append(len(input_list))
input_list[0] = 11
return input_list
def update_string(input_string):
input_string = 'NEW'
return input_string
my_list = [0,1,2]
print my_list
print update_list(my_list)
print my_list
my_string = 'OLD'
print my_string
print update_string(my_string)
print my_string
此代码提供以下输出:
[0, 1, 2]
[11, 1, 2, 3]
[11, 1, 2, 3]
OLD
NEW
OLD
为什么变量my_list
在没有属性的情况下被修改,而my_string
值在update_string()
函数之后保持不变?我不明白那个机制,你能给我解释一下吗?你知道吗
函数的行为没有什么不同。不同的是,其中一个名字叫:
这会将名称
input_string
设置为新对象。在另一个函数中,不指定名称。只调用对象上的方法,并将其指定给对象上的索引。这会改变对象内容:请注意,分配给索引与分配给名称不同。您可以先将列表对象分配给另一个名称,然后分别进行索引分配,这样就不会有任何更改:
因为分配给索引会改变列表中包含的一个元素,而不是用来引用列表的名称。你知道吗
如果您直接分配给
input_list
,您会看到相同的行为:您也可以在函数外部执行此操作:
对
b_str
和b_list
的初始赋值正是调用函数时发生的情况;函数的参数被赋值为传递给函数的值。指定不会创建副本,而是创建对对象的附加引用。你知道吗如果要传入列表对象的副本,请创建副本:
相关问题 更多 >
编程相关推荐