为什么Python列表的行为会因声明的不同而不同?

2024-09-30 14:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python的另一个列表中创建一个列表。我注意到,根据声明,最终(外部)列表的行为有所不同。你知道吗

我试着用两种不同的方式创建列表列表。两个案例都给了我不同的结果。你知道吗

#Case 1
def test():
    lt1 = lt2 = list()
    for i in range(0, 10):
        for j in range(0, 2):
            lt1.append(j);
        lt2.append(lt1);
        lt1 = [];
    print (lt2)

if __name__ == "__main__":
    test()
#Case 2
def test():
    lt1 = list()
    lt2 = list()
    for i in range(0, 10):
        for j in range(0, 2):
            lt1.append(j);
        lt2.append(lt1);
        lt1 = [];
    print (lt2)

if __name__ == "__main__":
    test()

在案例1中,输出为 [0,1,[…],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1]]

在案例2中,输出是 [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]] 这是我实现的预期答案。你知道吗

我想知道为什么第一个代码片段的行为不同。你知道吗


Tags: nameintest列表forifdefrange
1条回答
网友
1楼 · 发布于 2024-09-30 14:28:31

因为第一行:

>>> a = b = []
>>> a
[]
>>> b
[]
>>> a is b
True
>>> a = []
>>> b = []
>>> a is b
False
>>> 

与案例1中的一行一样,它包含相同的对象,因此:

>>> a = b = []
>>> a.append(1)
>>> a
[1]
>>> b
[1]
>>> 

这两条线是不会发生的:

>>> a = []
>>> b = []
>>> a.append(1)
>>> a
[1]
>>> b
[]
>>> 

所以很简单,因为案例1的第一行有ab,它们是完全相同的对象,不同于第二个案例的第一行,它们是相同的值,但是不同的idid(a) == id(b)a is b相同)。你知道吗

相关问题 更多 >