Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python中的列表会有这种行为?_Python_List_Immutability - Fatal编程技术网

为什么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']