| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 785 人关注过本帖
标题:求助: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'}
2018-10-09 11:43
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:104
帖 子:1667
专家分:7280
注 册:2015-3-19
  得分:7 
因为所有值都满足修改条件啊

wechat    PrinceThumb
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
来 自:湖南
等 级:版主
威 望:104
帖 子:1667
专家分:7280
注 册:2015-3-19
  得分:0 
不是呦,表示一个子列表,下标从0到2的列表

wechat    PrinceThumb
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
来 自:湖南
等 级:版主
威 望:104
帖 子:1667
专家分:7280
注 册:2015-3-19
  得分:0 
可能是访问了同一个元组对象了,我刚改成三个元组对象的数组是没问题的
至于为什么访问同一对象,可能就是接口说明提到的元组中的元素值不允许修改的原因吧





wechat    PrinceThumb
2018-10-09 17:00
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:104
帖 子:1667
专家分:7280
注 册: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"})

wechat    PrinceThumb
2018-10-09 17:11
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:城市猎人
威 望:9
帖 子:1061
专家分:5089
注 册:2015-10-27
  得分:7 
回复 5楼 ashennong
我有一个猜想
程序代码:
a#!/usr/bin/env python
#
-*- coding: utf-8 -*-
#
@Date    : 2018-10-09 22:14:01
#
@Author  : Chauncy (chauncy523@gmail.com)
#
@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







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

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