qqq789 发表于 2022-10-14 15:25

python编程求助

python新手,
今天在编写练手项目的时候出现了一个问题, 我的目的是将这个生成的字典里面删除方块A , 结果梅花,黑桃,红心,中的A都被删除了, 想了很久也没想出解决办法.
代码如下:

poker = {}# 创建一个扑克的字典
shuzi = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
# 每个花色有13张牌,都需要添加进去
poker["方块"] = shuzi# 方块
poker["梅花"] = shuzi# 梅花
poker["黑桃"] = shuzi# 黑桃
poker["红心"] = shuzi# 红心
print(poker)

print("删之前的方块:", poker["方块"])
print("删之前的梅花:", poker["梅花"])
print("删之前的黑桃:", poker["黑桃"])
print("删之前的红心:", poker["红心"])

poker["方块"].remove("A")#删除 方块A

print("删除之后的方块:", poker["方块"])
print("删除之后的梅花:", poker["梅花"])
print("删除之后的黑桃:", poker["黑桃"])
print("删除之后的红心:", poker["红心"])


运行结果是:

{'方块': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'],
'梅花': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'],
'黑桃': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'],
'红心': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']}
删之前的方块: ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删之前的梅花: ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删之前的黑桃: ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删之前的红心: ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删除之后的方块: ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删除之后的梅花: ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删除之后的黑桃: ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
删除之后的红心: ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']


希望有大佬能帮我解惑,万分感谢 {:1_893:} {:1_893:} {:1_893:}

Edison666 发表于 2022-10-14 16:02

每一个都是相当于{key : 列表},而你的删除行为相当于操作了列表

ly:幽灵 发表于 2022-10-14 16:06

你操作了list,你可以理解成里面的列表都是同一个,只是一个软链接映射,你直接字典key : 这样就好了

poker["方块"] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']# 方块
poker["梅花"] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']# 梅花
poker["黑桃"] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']# 黑桃
poker["红心"] = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']# 红心

kill-9 发表于 2022-10-14 16:21

poker["方块"] = shuzi[:]# 方块
poker["梅花"] = shuzi[:]# 梅花
poker["黑桃"] = shuzi[:]# 黑桃
poker["红心"] = shuzi[:]# 红心

weiekko 发表于 2022-10-14 16:22

本帖最后由 weiekko 于 2022-10-14 16:50 编辑

python 变量是引用


x =
y = x
x.remove(3)
print(y)# y = 4




不可变类型,内存中的数据不允许被修改:

      数字类型:int、bool、float、complex、long(2,x)

      字符串:str

      元组:tuple

可变类型,内存中的数据可以被修改:

      列表:list      <字典的key只能使用不可变类型的数据>

      字典:dict

<注>

1、可变类型的数据变化,是用过 方法 来实现的

2、如果给一个可变类型的变量,赋值了一个新的数据,引用会修改

      变量不再对之前的数据引用,而改为对新赋值的数据引用

森岛帆高 发表于 2022-10-14 16:38

weiekko 发表于 2022-10-14 16:22
python 变量都是引用
就比如
x = 3



应该拿个引用类型举例吧

weiekko 发表于 2022-10-14 16:48

森岛帆高 发表于 2022-10-14 16:38
应该拿个引用类型举例吧

完了完了,忘了

x =
y = x
x.remove(3)
print(y)# y = 4

lizy169 发表于 2022-10-14 17:13

好多大神,学习了

ghd19940802 发表于 2022-10-14 17:29

简单来说就是 你看着显示了四个类型 其实它们指向的是同一个列表 你改动内容就会影响全部的显示

白桦树Ted 发表于 2022-10-14 17:36

# 每个花色有13张牌,都需要添加进去
print(id(poker['方块']), id(poker['梅花']), id(poker['黑桃']), id(poker['红心']),) # 结果显示是同一个地址,remove了一个全都会改变。
poker["方块"] = shuzi# 方块
shuzi = copy.deepcopy(shuzi)。# 加这一行代码
poker["梅花"] = shuzi# 梅花
poker["黑桃"] = shuzi# 黑桃
poker["红心"] = shuzi# 红心
print(poker)
页: [1] 2
查看完整版本: python编程求助