Python二维列表修改单元素全列变更的原因与解决方法
Python二维列表创建的引用问题分析与解决
问题原因
你使用GameBoard = [GM1 for x in range(Input)]创建二维列表时,并没有生成5个独立的子列表——所有子列表都是对同一个GM1列表的引用。Python中列表是可变对象,当你修改其中一个子列表的元素时,本质上是修改了这个共享的底层列表,因此所有子列表都会同步显示修改后的结果。
解决方法
方法1:嵌套列表推导式(推荐)
直接在推导式中每次生成新的子列表,确保每个子列表都是独立的对象:
Input = 5 GameBoard = [[0 for x in range(Input)] for x in range(Input)] print(*GameBoard, sep="\n") GameBoard[1][1] = 5 print(*GameBoard, sep="\n")
方法2:复制原列表生成新对象
利用列表的copy()方法,每次循环复制原列表生成独立的新列表:
Input = 5 GM1 = [0 for x in range(Input)] GameBoard = [GM1.copy() for x in range(Input)]
方法3:用list()构造函数复制
通过list()构造函数生成原列表的副本,同样能实现子列表独立:
Input = 5 GM1 = [0 for x in range(Input)] GameBoard = [list(GM1) for x in range(Input)]
内容的提问来源于stack exchange,提问作者Ilyad Greyrat
相关产品推荐
相关产品推荐

