You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python向2D列表指定位置插入元素时所有子列表同步修改问题排查

问题根源

你在创建二维列表时,所有子列表都指向了同一个内存对象:

  • 你提前创建了子列表b,后续循环时反复把同一个b添加到外层列表stworzona_tablica中,所有子列表本质是同一个引用,修改任意一个子列表的内容,所有子列表都会同步更新。
  • 后续你直接把stworzona_tablica同时赋值给tablica_gracza和tablica_komputera,这两个列表也指向同一个对象,修改其中一个另一个也会同步变动。
修复代码
import random as r

liczba_statkow = 5
wielkosc_tablicy_x = 9
wielkosc_tablicy_y = 9

def tworzenie_tablicy(wielkosc_tablicy_x, wielkosc_tablicy_y):
    stworzona_tablica = []
    for _ in range(wielkosc_tablicy_y):
        # 每次循环都创建新的子列表,避免引用同一个对象
        b = ["*"] * wielkosc_tablicy_x
        stworzona_tablica.append(b)
    for row in stworzona_tablica:
        print(row)
    return stworzona_tablica

# 玩家和电脑的列表分别创建,互不干扰
tablica_gracza = tworzenie_tablicy(wielkosc_tablicy_x, wielkosc_tablicy_y)
tablica_komputera = tworzenie_tablicy(wielkosc_tablicy_x, wielkosc_tablicy_y)

def umieszczanie_statkow_na_tablicy_komputera(tablica_komputera, liczba_statkow, wielkosc_tablicy_x, wielkosc_tablicy_y):
    print(" ")
    wspozedna_x = r.randint(0, wielkosc_tablicy_x-1)
    wspozedna_y = r.randint(0, wielkosc_tablicy_y-1)

    # 直接赋值即可,不需要先删再插
    tablica_komputera[5][5] = "X"
    
    for row in tablica_komputera:
        print(row)

umieszczanie_statkow_na_tablicy_komputera(
    tablica_komputera, liczba_statkow, wielkosc_tablicy_x, wielkosc_tablicy_y)
优化说明
  • 列表修改不需要del加insert两步操作,直接用tablica_komputera[y][x] = 目标值即可,效率更高逻辑更清晰。
  • 去掉了不必要的全局变量声明,函数创建完列表直接return返回值使用,代码可维护性更强。

内容的提问来源于stack exchange,提问作者Michał Wisełka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:54:07