注册 登录
编程论坛 Python论坛

求助:python修改字典列表前三个值,为什么所有的值都被修改?谢谢!

ashennong 发布于 2018-10-09 11:43, 4292 次点击
问题:修改字典列表前三个值,为什么所有的值都被修改?谢谢!
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'}
10 回复
#2
林月儿2018-10-09 12:15
因为所有值都满足修改条件啊
#3
ashennong2018-10-09 13:55
回复 2楼 林月儿
for alien in aliens[0:2]:
这个不是只修改了2个吗?为什么三个都修改了
#4
林月儿2018-10-09 14:30
不是呦,表示一个子列表,下标从0到2的列表
#5
ashennong2018-10-09 16:10
回复 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个的值,应该怎么写呢?谢谢
#6
林月儿2018-10-09 17:00
可能是访问了同一个元组对象了,我刚改成三个元组对象的数组是没问题的
至于为什么访问同一对象,可能就是接口说明提到的元组中的元素值不允许修改的原因吧




#7
林月儿2018-10-09 17:11
把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"})
#8
书生牛犊2018-10-09 22:23
回复 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***

结果



#9
ashennong2018-10-10 21:22
回复 8楼 书生牛犊
万分感谢!
#10
ashennong2018-10-10 21:23
回复 7楼 林月儿
万分感谢!
#11
zjd8737215192018-10-15 18:48
8楼正解,调整代码如下,
程序代码:
# alien_0={"color":"green","points":5,"speed":"slow"}
aliens=[]
for alien_number in range(3):
    alien_0 = {"color": "green", "points": 5, "speed": "slow"}
    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('...')
1