为什么python中的列表会有这种行为?
如果我有以下功能和代码:为什么python中的列表会有这种行为?,python,list,immutability,Python,List,Immutability,如果我有以下功能和代码: def do_something(a, b): a.insert(0, ’z’) b = [’z’] + b a = [’a’, ’b’, ’c’] a1 = a a2 = a[:] b = [’a’, ’b’, ’c’] b1 = b b2 = b[:] do_something(a, b) 为什么打印(a)会产生['z','a','b','c'],但是打印b仍然只打印['a','b','c'] 在我创建的函数中,b=b+['z']那么z不也应该在列
def do_something(a, b):
a.insert(0, ’z’)
b = [’z’] + b
a = [’a’, ’b’, ’c’]
a1 = a
a2 = a[:]
b = [’a’, ’b’, ’c’]
b1 = b
b2 = b[:]
do_something(a, b)
为什么打印(a)
会产生['z','a','b','c']
,但是打印b
仍然只打印['a','b','c']
在我创建的函数中,b=b+['z']
那么z
不也应该在列表中吗
还有,为什么打印
a[:]
不打印新列表['z','a','b','c']
而打印旧列表['a','b','c']
呢?因为在中,您正在修改带有标签a
的列表,但您正在创建一个新列表,并将其重新分配给标签b
,不使用标签b
这意味着a
的do\u something
之外的列表已经更改,但是b
列表没有更改,因为您只是碰巧在func内部使用了相同的名称,您还可以对具有不同名称的func执行相同的操作,例如:
def do_something(x, y):
x.insert(0, ’z’)
y = [’z’] + y
外部的打印仍会像您报告的一样,因为函数内部和外部对象的标签不相关,在您的示例中,它们恰好是相同的。因为在中,您正在修改标签为a
的列表,但您正在创建一个新列表,并将其重新分配给标签b
,而不是使用标签b
修改列表
这意味着a
的do\u something
之外的列表已经更改,但是b
列表没有更改,因为您只是碰巧在func内部使用了相同的名称,您还可以对具有不同名称的func执行相同的操作,例如:
def do_something(x, y):
x.insert(0, ’z’)
y = [’z’] + y
外部的打印仍会像您报告的一样,因为函数内部和外部对象的标签不相关,在您的示例中,它们恰好是相同的。From
嗯
尽管上面的说法是正确的,但是你所想到的带有“z”的b与将在程序“末尾”打印的b不同。但打印在第一行的b是函数def_something()中的b
代码:
输出:
a b before function: ['a', 'b', 'c'] | ['a', 'b', 'c']
a b in function: ['z', 'a', 'b', 'c'] | ['z', 'a', 'b', 'c']
a b after function: ['z', 'a', 'b', 'c'] | ['a', 'b', 'c']
有关的详细信息。来自
嗯
尽管上面的说法是正确的,但是你所想到的带有“z”的b与将在程序“末尾”打印的b不同。但打印在第一行的b是函数def_something()中的b
代码:
输出:
a b before function: ['a', 'b', 'c'] | ['a', 'b', 'c']
a b in function: ['z', 'a', 'b', 'c'] | ['z', 'a', 'b', 'c']
a b after function: ['z', 'a', 'b', 'c'] | ['a', 'b', 'c']
有关的更多信息。请注意您的智能引用…Python名称空间值得一读。例如,、和,它们也恰好是谷歌搜索结果的最热门。我特别喜欢第一个(python-course.eu)。请注意你的妙语……python名称空间值得一读。例如,、和,它们也恰好是谷歌搜索结果的最热门。我特别喜欢第一个(python-course.eu)。
a b before function: ['a', 'b', 'c'] | ['a', 'b', 'c']
a b in function: ['z', 'a', 'b', 'c'] | ['z', 'a', 'b', 'c']
a b after function: ['z', 'a', 'b', 'c'] | ['a', 'b', 'c']