标题:求助:python修改字典列表前三个值,为什么所有的值都被修改?谢谢!
只看楼主
ashennong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-23
结帖率:0
已结贴  问题点数:20 回复次数:10 
求助:python修改字典列表前三个值,为什么所有的值都被修改?谢谢!
问题:修改字典列表前三个值,为什么所有的值都被修改?谢谢!
alien_0={"color":"green","points":5,"speed":"slow"}
aliens=[]
for alien_number in range(3):
    aliens.append(alien_0)
for alien in aliens[0:2]:
    if alien['color']=='green':
        alien['color']='yellow'
        alien['points']=10
        alien['speed']='medium'
for alien in aliens[:3]:
    print(alien)
print('...')
运行结果:
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
搜索更多相关主题的帖子: 修改 字典 列表 color for 
2018-10-09 11:43
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:7 
因为所有值都满足修改条件啊

剑栈风樯各苦辛,别时冰雪到时春
2018-10-09 12:15
ashennong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-23
得分:0 
回复 2楼 林月儿
for alien in aliens[0:2]:
这个不是只修改了2个吗?为什么三个都修改了
2018-10-09 13:55
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
不是呦,表示一个子列表,下标从0到2的列表

剑栈风樯各苦辛,别时冰雪到时春
2018-10-09 14:30
ashennong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-23
得分:0 
回复 4楼 林月儿
alien_0={"color":"green","points":5,"speed":"slow"}
aliens=[]
for alien_number in range(3):
    aliens.append(alien_0)
for alien in aliens[0:1]:
    if alien['color']=='green':
        alien['color']='yellow'
        alien['points']=10
        alien['speed']='medium'
for alien in aliens[:3]:
    print(alien)
print('...')
运行:
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
这个的结果仍然是全部值都变了 实在搞不懂,如果我只想改变2个的值,应该怎么写呢?谢谢
2018-10-09 16:10
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
可能是访问了同一个元组对象了,我刚改成三个元组对象的数组是没问题的
至于为什么访问同一对象,可能就是接口说明提到的元组中的元素值不允许修改的原因吧





剑栈风樯各苦辛,别时冰雪到时春
2018-10-09 17:00
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
把append内容改成alien_0赋值对象,就是一长串的那个元组对象,结果就是你想要的了,如下

alien_0={"color":"green","points":5,"speed":"slow"}
aliens=[]
for alien_number in range(3):
    aliens.append({"color":"green","points":5,"speed":"slow"})

剑栈风樯各苦辛,别时冰雪到时春
2018-10-09 17:11
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:7 
回复 5楼 ashennong
我有一个猜想
程序代码:
a#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-10-09 22:14:01
# @Author  : Chauncy (chauncy523@)
# @Link    : 
# @Version : $Id$

alien_0={"color":"green","points":5,"speed":"slow"}
aliens=[]
for alien_number in range(3):
    aliens.append(alien_0)

alien_0['color']= "yellow"#这里修改alien_0的一个数据,结果aliens里全部都变了#
#这说明aliens是真的复制了三个指向alien_0的指针(我Python不熟,只学过C),而不是把alien_0里面的数据复制进去。对其中任意一个的修改都会修改到alien_0,进而3个数据都会被改变#
#解决方法。。。我就不知道了#


for alien in aliens[:3]:
    print(alien)
print('...')

{'color': 'yellow', 'points': 5, 'speed': 'slow'}
{'color': 'yellow', 'points': 5, 'speed': 'slow'}
{'color': 'yellow', 'points': 5, 'speed': 'slow'}
...

***Repl Closed***

结果




φ(゜▽゜*)♪
2018-10-09 22:23
ashennong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-23
得分:0 
回复 8楼 书生牛犊
万分感谢!
2018-10-10 21:22
ashennong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-23
得分:0 
回复 7楼 林月儿
万分感谢!
2018-10-10 21:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490262-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016331 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved