鱼C论坛

 找回密码
 立即注册
查看: 4338|回复: 24

大家好,咨询一个关于Python的基础问题,求大神解答!

[复制链接]
发表于 2015-4-9 21:30:59 | 显示全部楼层 |阅读模式
1鱼币
http://bbs.fishc.com/thread-38751-1-1.html
这个帖子中,第5题的答案中提到:
list1 = [2,1,3,4,5]
list2 = list1[:]
list3 = list1

概念区别是,list3就像是另外贴在了数据[2,1,3,4,5]上的标签,而list2是另外复制出来的一份数据。
结论:一个固定的东西,赋值给变量,都是相当于给固定数据加了不同的标签。


同理:


a = 1
b = a
这时,a和b变量在内存中的id是相同的。
a += 1
此时为什么a=2,然而b=1呢?

这种标签的概念,在列表上适用,而在int变量上为何不同了呢?
求大神解答!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-10 09:24:56 | 显示全部楼层
顶一下lz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-10 11:42:35 | 显示全部楼层
'='和自身的方法是不一样的。
  1. >>> a = 1
  2. >>> b = a
复制代码

按楼主想的是a += 1 a变成了2,但是b还是1. 这是因为引用不同了。a相当于引用了2,b还是引用了1.
因为1并没有改变,改变的只是a引用的数而已。
同理列表。
  1. >>> c = [1,2]
  2. >>> d = c
复制代码

c += [1] , c.append(1)之类的列表方法。这样改变的是列表自身。并没有改变引用。列表就是那个列表。
  1. >>> id([1, 2, 1])
  2. 31023712
  3. >>> id([1,2])
  4. 31023712
  5. >>> id(1)
  6. 1589165640
  7. >>> id(2)
  8. 1589165656
复制代码

1和2的地址是不同的,但是[1,2,1]和[1,2]的地址却是相同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-11 03:02:44 | 显示全部楼层
存储方法不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-4-11 07:03:03 | 显示全部楼层
非常感谢大家解答!我明白了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-11 14:02:14 | 显示全部楼层
我爱鱼C,
正如我爱小甲鱼,
他那呱唧呱唧
呱唧呱唧
呱唧呱唧的声音,
总缠绕于我的脑海,久久不肯散去……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-12 21:14:15 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-20 18:29:20 | 显示全部楼层
wei_Y 发表于 2015-4-10 11:42
'='和自身的方法是不一样的。

按楼主想的是a += 1 a变成了2,但是b还是1. 这是因为引用不同了。a相当于 ...

版主棒棒哒!

评分

参与人数 1鱼币 +5 收起 理由
wei_Y + 5 3Q。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-20 23:06:26 | 显示全部楼层
顶起来再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-22 10:16:07 | 显示全部楼层
楼主思维很活跃 顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-2 00:59:53 | 显示全部楼层
感觉好像懂了,顺便学了id() 方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-2 15:28:24 | 显示全部楼层
我是来学习的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-19 20:24:26 | 显示全部楼层
啊 我才學到第三課:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-31 17:23:27 | 显示全部楼层
顶起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-2 11:29:08 | 显示全部楼层
>>> list1 = [1,2,3]
>>> list2 = list1[:]
>>> list3 = list1
>>> id(list1)
24305576
>>> id(list2)
24388712
>>> id(list3)
24305576
>>> list1.append(4)    #如果向列表添加或删除一个元素,它的ID地址不变,是在元ID地址上修改
>>> list1
[1, 2, 3, 4]
>>> list2
[1, 2, 3]
>>> list3
[1, 2, 3, 4]
>>> id(list1)
24305576
>>> id(list2)
24388712
>>> id(list3)
24305576

>>> a = 1
>>> b = a
>>> id(a)
505991632
>>> id(b)
505991632
>>> a += 1
>>> a              
2
>>> b
1
>>> id(a)
505991648        #但是a的ID地址或转变,而b只会跟顺它原ID改变,所以a=2.但是b=1
>>> id(b)
505991632             不对请包含:shy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-3 08:40:44 | 显示全部楼层
:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-10 09:43:08 | 显示全部楼层
后面一句a+1的是改变了a的位置,所以不一样了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-6 19:34:10 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-8 19:34:51 | 显示全部楼层
一起学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-8 17:39:54 | 显示全部楼层
后面a还是等于1,只是a+=1意思是再加上一个1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 09:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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