.SAI. 2023-01-10 11:17 采纳率: 100%
浏览 35
已结题

使用 pygame 模块时遇到的列表值被改变的问题

本人刚学python,最近在学习如何利用pygame进行图片放大旋转等处理

我想通过 pygame.Color 结合 pygame.PixelArray 来获取窗口的像素颜色信息。我打算把这些信息用二维列表 color 储存起来,但是存储的过程的中却发生了令我非常不解的问题

import sys,pygame
screen=pygame.display.set_mode((800,800))
image=pygame.image.load("QQ图片20221230223116.png")
screen.blit(image,(0,0))
run=True
A=[[2,0],[0,2]]
pixelarray=pygame.PixelArray(screen)
c=[]
color=[]
for i in range(0,800):
    c.append(" ")
for i in range(0,800):
    color.append(c)
f=False
for i in range(0, 800):
    for j in range(0, 800):
        color[i][j]=pygame.Color(pixelarray[i,j])
print(color[234][12])
print(pygame.Color(pixelarray[234,12])

按照我的逻辑来说,代码中对 color 赋值的循环部分应该已将 pygame.Color(pixelarray[234,12] 的值赋值给了 color[234][12],但是我将他们分别输出后发现,他们竟然不相等!

我尝试在循环中输出 color[234][12] 是何时发生的改变,结果是当 i=408,j=12 的时候 color[234][12] 就被从原有正确的值改变为了错误的值,对此过程我仍然不解。

希望各位能帮我分析一下原因,万分感谢!

  • 写回答

2条回答 默认 最新

  • 於黾 2023-01-10 11:48
    关注

    c是个list,它是可变值类型
    你在color里不停的append(c),这些都是同一个对象,指向同一个地址,你改一个就都改了
    改成这样
    color=[[' ' for x in range(800)] for x in range(800)]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法