首页 > 试题广场 >

执行以下程序,输出结果为() a = [['1','2']

[单选题]

执行以下程序,输出结果为()

a = [['1','2'] for i in range(2)]

b = [['1','2']]*2

a[0][1] = '3'

b[0][0] = '4'

print(a,b) 


  • [['1', '3'], ['1', '3']] [['4', '2'], ['4', '2']]

  • [['1', '3'], ['1', '2']] [['4', '2'], ['4', '2']]

  • [['1', '3'], ['1', '2']] [['4', '2'], ['1', '2']]

  • [['1', '3'], ['1', '3']] [['4', '2'], ['1', '2']]
在python中, 如果用一个列表a乘一个数字会得到一个新的列表b, 这个新的列表b的元素是a的元素重复n次。
a = [1,2]
b = a * 2  # [1, 2, 1, 2]
此外还要注意一点,当a中的元素为引用类型时,如:
a = [[1,2]]
b = a * 2  # b -> [[1, 2], [1, 2]]

# 修改b[0][0], b[0][1]同样被修改了, 这是因为b[0]与b[1]有相同的地址
b[0][0] = 3
print(b)  # [[3, 2], [3, 2]]

# 打印b[0]和b[1]的 id
print(id(b[0]))  # 1904838110536
print(id(b[1]))  # 1904838110536

发表于 2022-02-11 20:31:13 回复(6)
id(b[0]) == id(b[1]) # True ########################### [[xx]]*n: 嵌套列表乘法得到的每个项都是引用
编辑于 2021-12-16 09:14:43 回复(0)
在python中,在列表中使用乘法,其实相当于对列表元素的浅拷贝

发表于 2022-08-06 18:02:29 回复(0)
a和b生成的都是二维列表
b列表的索引指向的是同一片空间,所以,改变了其中一个,都会改变
发表于 2022-01-17 15:27:44 回复(0)
a = [["1","2"] for i in range(2)]  
b = [["1",'2']] *2      
print(id(a[0]), id(a[1]))  # 子对象内存地址不同
print(id(b[0]), id(b[1]))  # 子对象内存地址相同
a[0][0] = "3"
b[0][0] = '4'
print(a)
print(b)

#第一种a属于深拷贝,自己新开辟一块内存,将拷贝的全部考过来。子对像完全独立,变化完全无关系。重新分配一块内存,创建一个新对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新的对象中。

#第二种b浅拷贝,只拷贝元数据的首地址,然后通过原数据的首地址去获取内容,子对象变化同步,其它不同步。重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
发表于 2022-09-27 23:55:07 回复(0)
是说*相当于浅拷贝吗
发表于 2022-01-16 23:19:44 回复(0)
a[0][0]应该是指第零个列表里面的第零个元素吧
发表于 2021-12-15 20:41:54 回复(0)
发表于 2022-05-17 14:37:58 回复(0)
记录“在python中,在列表中使用乘法,其实相当于对列表元素的浅拷贝 ”这句话
发表于 2023-10-08 15:01:46 回复(0)
ab都生成两个二维数组,修改数组第0行第一列的元素2为3,不影响第二行的数据,所以a 是1,3,1,2,修改数组b第0行第0列的元素1为4,因为生成的两行数据引用的是同一个地址,所以第一行的1也会修改为4,所以b是4,2,4,2
发表于 2022-07-03 16:45:42 回复(0)
 range(2)]在题中是什么意思?
发表于 2022-04-24 16:35:24 回复(3)
b是深浅拷贝的问题,题中是浅拷贝
发表于 2023-07-25 15:00:40 回复(0)
列表中两个元素地址一样
发表于 2023-03-22 00:36:26 回复(0)
使用列表生成式来重复列表元素,是采用深拷贝
使用*是浅拷贝
发表于 2023-03-12 11:20:32 回复(0)
a = [['1','2'] for i in range(2)]
a=[[1,2],[1,2]]

a = [['1','2'] for i in range(3)]
a=[[1,2],[1,2],[1,2]]

编辑于 2023-03-03 17:11:47 回复(0)
a = [['1','2'] for i in range(1)]
a
>>[['1', '2']]
a = [['1','2'] for i in range(2)]
a
>>[['1', '2'], ['1', '2']]
这里的意思可能是循环的次数
发表于 2022-10-01 10:44:58 回复(0)
容器通用运算 * 是浅拷贝
发表于 2022-09-04 21:16:12 回复(0)
感觉是 修改b[0][0], b[1][0]同样被修改?
发表于 2022-07-04 21:39:33 回复(0)
a搞不懂,
发表于 2022-06-23 07:37:31 回复(0)
range(2)难道不是生成[0,1]吗
发表于 2022-05-11 20:00:06 回复(2)