|
100鱼币
本帖最后由 哭吧叫吧 于 2018-2-24 16:12 编辑
- #创建一个用于存储外星人的空列表
- aliens=[]
- #创建30个绿色外星人
- for alien_number in range(30):
- new_alien={"color":"green","point":5,"speed":"slow"}
- aliens.append(new_alien)
- #修改前三个
- for alien in aliens[0:3]:
- if alien["color"]=="green":
- alien["color"]="yellow"
- alien["speed"]="medium"
- alien["point"]=10
- #显示前5个外星人
- for alien in aliens[0:5]:
- print(alien)
复制代码
结果显示 修改成功:
- {'color': 'yellow', 'point': 10, 'speed': 'medium'}
- {'color': 'yellow', 'point': 10, 'speed': 'medium'}
- {'color': 'yellow', 'point': 10, 'speed': 'medium'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
复制代码
问题来了,众所周知,列表切片产生的是列表的副本,与原列表不是同一份空间。如:
- #修改列表前三项为字符“11111111”
- for alien in aliens[0:3]:
- alien="111111111111"
复制代码
结果显示 修改不成功:
- {'color': 'green', 'point': 5, 'speed': 'slow'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
- {'color': 'green', 'point': 5, 'speed': 'slow'}
复制代码
但是!!!在外星人代码里,修改了列表切片为什么会对原版会有影响,而我自己改成“1111111111”对原版完全没有影响????
本帖最后由 运运520 于 2018-2-24 17:08 编辑
你那个代码还是直接修改的列表啊,拿元组来解释,元组是不是不可以变,那元组里面的字典可不可以变?
dict1 = {'hero': 'yourself'}
tuple1 = (dict1, 2, 3)
print(tuple1)
tuple1[0]['hero'] = 'myself'
print(tuple1)
你执行一次。。。。
({'hero': 'yourself'}, 2, 3)
({'hero': 'myself'}, 2, 3)
那个你说的例子里面他改的不是列表,是改的列表里面的字典,无论切不切片,字典的内存地址是没变的。。。修改字典里面的数据跟元组没有任何关系了,每段代码都会在编译器里面占有一段内存地址,字典是实例化的字典类,地址不会变。。。
|
最佳答案
查看完整内容
你那个代码还是直接修改的列表啊,拿元组来解释,元组是不是不可以变,那元组里面的字典可不可以变?
dict1 = {'hero': 'yourself'}
tuple1 = (dict1, 2, 3)
print(tuple1)
tuple1[0]['hero'] = 'myself'
print(tuple1)
你执行一次。。。。
({'hero': 'yourself'}, 2, 3)
({'hero': 'myself'}, 2, 3)
那个你说的例子里面他改的不是列表,是改的列表里面的字典,无论切不切片,字典的内存地址是没变的。。。修改字 ...
|