|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么在例一中,list3的值没有改变,而例二中list3的值却改变了。
list3=list1 这个语句的本质是什么? 多谢!
例一
>>> list1=[3,4,1,2]
>>> list3=list1
>>> list1=[6]
>>> list3
[3, 4, 1, 2]
例二
>>> list1=[3,4,1,2]
>>> list2=list1[:]
>>> list3=list1
>>> list1.sort()
>>> list2
[3, 4, 1, 2]
>>> list3
[1, 2, 3, 4]
对于例1来说,你没搞懂python的变量名和变量的机制。你记住,变量名字(如list1 list2等)只是个‘标签’,哪里需要哪里贴。
在创建变量的时候,首先是生成一个对象(列表对象ist1=[3,4,1,2]),然后吧标签list1贴上去。好了既然是标签就可以贴多个(就像人的外号一样),于是list2=[3,4,1,2]也是将[3,4,1,2]贴上另一个标签list2的过程!!
所以list2 和 list1只是[3,4,1,2]的不同的名字,但是他还是一个人呢
- >>> list1=[3,4,1,2]
- >>> id(list1)
- 2707461824320
- >>> list3=list1
- >>> id(list3)
- 2707461824320
复制代码
这时候,你list1=[6]就是将在[3, 4, 1, 2]上面的标签list1撕下来贴到了[6],自然而然的就是[3, 4, 1, 2]上面只有list3的标签,而[6]就是list1的标签了哦
对于例2,
同样是这个问题,这里最关键的地方在于list2=list1[:]不是贴标签。在使用list1[:]的时候,这个操作是复制了一个[3,4,1,2]的内容!!!所以你得到的list1[:]和list1实际上不是同一个对象,只是他们都长得一样
- >>> list1=[3,4,1,2]
- >>> id(list1)
- 2707461824320
- >>> list2=list1[:]
- >>> id(list2)
- 2707422923776
复制代码
讲到这里你应该明白了。
然后就是后面的list1.sort()不会复制[3, 4, 1, 2]而是直接对其进行改变,所以就是只是改变了list1对应的这个[3,4,1,2],变成了 [1, 2, 3, 4],请注意贴在上面的标签就是list1和list3没动哦!
【总结】
1.变量名是变量(实例化的对象)的标签
2.一个对象可以贴很多标签,也可以撕下来
3.list1[:]是复制一个对象(id会变),list1.sort()是不是复制,是编辑
|
|