Python 列表更改项目值的打印方法

Python 列表更改项目值的打印方法,python,list,Python,List,我无法打印列表随机项目ST\U stac包含项目列表(卡片)。for循环中元素和索引的打印效果非常好,但当我打印整个数组时,其他项都设置了X,这很奇怪 卡片类别: class Card(object): def __init__(self, r=0): self.__rank=0 self.__hidden= False if type(r) == str: if r in 'J':

我无法打印
列表
<代码>随机项目ST\U stac包含项目列表(
卡片
)。for循环中元素和索引的打印效果非常好,但当我打印整个数组时,其他项都设置了X,这很奇怪

卡片
类别:

class Card(object):

    def __init__(self, r=0):
        self.__rank=0
        self.__hidden= False
        if type(r) == str:
            if r in 'J':
                self.__rank = 11  # Jack
            elif r in 'Q':
                self.__rank = 12  # Queen
            elif r in 'K':
                self.__rank = 13  # King
            elif r in 'A':
                self.__rank = 1   # Ace
        elif type(r) == int:
            if 1 <= r <= 14:
                self.__rank = r

    def hideCard(self, val):
        self.__hidden= val

    def isCardHidden(self):
        return self.__hidden

    def setRank(self, r):
        self.__rank = r

    def getRank(self):
        return self.__rank

    def getValue(self):
        """(Jack, Queen, King = 10), Ace = 1, reszta 2-10"""
        if self.__rank <= 10:
            return self.__rank
        else:
            return 10

    def __repr__(self):
        if self.__hidden:
            return "X".rjust(3)
        else:
            nameString = "blk A 2 3 4 5 6 7 8 9 10 J Q K"  # 'blk' for blank, i.e. no karty
            nameList = nameString.split()
            return (nameList[self.__rank]).rjust(3)
示例输出的片段:

index:
0 0
hidden:
  X
index:
0 1
hidden:
  X
index:
0 2
hidden:
  X
index:
0 3
hidden:
  X
index:
0 4
hidden:
  X
index:
0 5
showed:
  9
index:
1 0
hidden:
  X
index:
1 1
hidden:
  X
index:
1 2
hidden:
  X
index:
1 3
hidden:
  X
index:
1 4
hidden:
  X
index:
1 5
showed:
  8
index:
2 0
hidden:
  X
index:
2 1
hidden:
  X
index:
2 2
hidden:
  X
index:
2 3
hidden:
  X
index:
2 4
hidden:
  X
index:
2 5
showed:
  J
index:
3 0
hidden:
  X

[[  X,   X,   X,   X,   X,   X], [  X,   X,   X,   X,   X,   X], [  X,   2,   X,   2,   X,   J], [  X,   X,   X,   X,   X,   X], [  2,   X,   X,   X,   X], [  X,   X,   X,   X,   X], [  J,   X,   X,   X,   X], [  X,   X,   X,   X,   X], [  X,   X,   X,   X,   J], [  X,   X,   X,   X,   2]]
根据这一评论:

@user2357112 her是卡片组的初始化(随机项ST_stac的来源):self.\u talia=8*[范围(1,14)内j的卡片(j)]

这意味着您在随机的\u itemst\u stac中对同一张卡有多个引用

您应该为随机堆栈中所需的每张卡制作一张新的
卡,而不是将列表相乘

比如:

self.__talia = [Card(j%13+1) for j in range(13*8)]

如果你想要每张卡片1-13,8次。

你能邮寄吗“随机项目”未定义什么是plansza?是super_matrix吗?@Discriment是的,很抱歉我在翻译过程中犯了错误。我想真正的问题是,您希望复制的东西实际上并没有复制,所以您在两个数据结构中有相同的
对象。当您在一个数据结构中更改
卡时,更改在另一个数据结构中是可见的。是的,这绝对不是您所期望的复制。你会发现self.talia[0]就是self.talia[13]
,还有其他类似的问题。列表乘法仅复制引用;它不会复制实际的
对象。您需要将其初始化为
[范围(8)中的卡(j)用于范围(1,14)中的j)]
self.__talia = [Card(j%13+1) for j in range(13*8)]