这是一道关于Python列表浅拷贝的经典题目。代码首先创建了一个二维列表,然后修改其中一个元素。关键在于理解Python中星号操作符的行为机制。
让我们先分析内层表达式。当执行[1]*3时,Python创建一个新列表,包含三个独立的整数1。这三个元素在内存中是分别存储的,互不影响。
现在分析外层表达式。当执行[[1]*3]*4时,Python不是创建4个独立的列表,而是创建4个指向同一个列表对象的引用。这就是浅拷贝的关键特征。
现在执行a[1][2]=6。由于所有的a[0]、a[1]、a[2]、a[3]都指向同一个列表对象,修改其中任何一个的元素都会影响其他所有引用。因此a[3][2]的值也变成了6,答案是D。
为了避免浅拷贝问题,我们应该使用列表推导式来创建二维列表。比如[[1]*3 for _ in range(4)],这样每次迭代都会创建新的独立列表对象。理解浅拷贝与深拷贝的区别是Python编程的重要基础。