鱼C论坛

 找回密码
 立即注册
查看: 867|回复: 7

关于python中列表的一个小问题

[复制链接]
发表于 2018-8-29 16:04:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问一下,一般情况下
a = 1
b = a

此时b = 1

我这些改变a的值,使a=5,那么这时b应该还是等于1?

那现在
list1 = [1,2,3]
list2 = list1

list1.reverse()
现在list1 = [3,2,1]

list2为什么也等于[3,2,1]不是[1,2,3]呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-29 16:11:29 | 显示全部楼层
为什么不自己敲一下代码呢??
虽然是不同的变量名称,但它们所参考的资料是同一笔~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-29 16:13:55 | 显示全部楼层
claws0n 发表于 2018-8-29 16:11
为什么不自己敲一下代码呢??
虽然是不同的变量名称,但它们所参考的资料是同一笔~~

敲过了,但是理解上还是不懂。。
能不能从理论上两块的不同解答一下呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-29 16:18:12 | 显示全部楼层
MaybeC 发表于 2018-8-29 16:13
敲过了,但是理解上还是不懂。。
能不能从理论上两块的不同解答一下呢

因为 python 不是建立新的资料,有深/浅拷贝
b = a # 你想要一样的资料就让变量参考同一笔资料就好

list1 = [1,2,3]
list2 = list1[:] #试试   这个时候才是复制,而不是让变量参考同一个内存中的资料
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-29 16:22:29 | 显示全部楼层
你把list1.reverse()改为list1 = [3, 2, 1],看看是不是与a和b的情况一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-29 16:28:40 | 显示全部楼层
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一块内存
所以你对new和old指向的数据进行改动,比如列表的pop,sort,reverse等操作都会对两者同时产生作用,因为他们修改了内存中的数据
而你将old重新赋值,意味着old标签指向另外一块内存,从此old和new再无瓜葛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-8-30 00:27:50 | 显示全部楼层
BngThea 发表于 2018-8-29 16:28
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-30 00:37:17 | 显示全部楼层
因为,list1 和 list2 都指向同一个数据[1,2,3],这个数据被 方法处理过后,会直接影响和它有关的变量。而重新它赋值(a=5),是彻底的改变了原来的数据(1),两个变量不再指向同一个数据,所以b不受影响。总而言之,重新赋值,和 使用方法对数据进行更改,是不一样的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-1 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表