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:}
每一个都是相当于{key : 列表},而你的删除行为相当于操作了列表 你操作了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']# 红心 poker["方块"] = shuzi[:]# 方块
poker["梅花"] = shuzi[:]# 梅花
poker["黑桃"] = shuzi[:]# 黑桃
poker["红心"] = shuzi[:]# 红心 本帖最后由 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、如果给一个可变类型的变量,赋值了一个新的数据,引用会修改
变量不再对之前的数据引用,而改为对新赋值的数据引用
weiekko 发表于 2022-10-14 16:22
python 变量都是引用
就比如
x = 3
应该拿个引用类型举例吧 森岛帆高 发表于 2022-10-14 16:38
应该拿个引用类型举例吧
完了完了,忘了
x =
y = x
x.remove(3)
print(y)# y = 4 好多大神,学习了 简单来说就是 你看着显示了四个类型 其实它们指向的是同一个列表 你改动内容就会影响全部的显示 # 每个花色有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