嵌套列表(以下简称嵌套列表,如:a = [[1, 2, 3], [2, 4]])快速复制后(以下简称复制列表,如:[[1, 2, 3], [2, 4], [1, 2, 3], [2, 4], [1, 2, 3], [2, 4]]),相同元素(如:[1, 2, 3])为什么指向同一对象?而自定义一个与复制列表相同的列表(如:[[1, 2, 3], [2, 4], [1, 2, 3], [2, 4], [1, 2, 3], [2, 4]]),相同元素(如:[1, 2, 3])却指向不同的对象?这是为什么(具体情况详见下面的代码)?
# 定义一个嵌套列表a,并输出
a = [[1, 2, 3], [2, 4]]
print(f"嵌套列表:{a}")
# 对嵌套列表进行复制,得到复制列表b,并输出
b = a * 3
print(f"复制列表:{b}")
# 查看嵌套列表a与复制列表b中相同元素的地址:相同元素均指向同一对象
print(f"元素[1, 2, 3]的地址:{id(a[0])}、{id(b[0])}、{id(b[2])}、{id(b[4])}")
print(f"元素[2, 4]的地址:{id(a[1])}、{id(b[1])}、{id(b[3])}、{id(b[5])}")
# 修改嵌套列表中a[0][0]的值,则列表a、b中其他对应元素的值也进行了修改
a[0][0] = 100
print(a)
print(b)
print("#" * 70)
# 定义一个与上面复制列表b一样的列表c,并输出
c = [[1, 2, 3], [2, 4], [1, 2, 3], [2, 4], [1, 2, 3], [2, 4]]
print(c)
# 查看列表c中相同元素的地址:地址各不相同
print(f"元素[1, 2, 3]的地址:{id(c[0])}、{id(c[2])}、{id(c[4])}")