鱼C论坛

 找回密码
 立即注册
查看: 2065|回复: 2

第十二讲第一题

[复制链接]
发表于 2020-1-28 16:27:26 | 显示全部楼层 |阅读模式

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

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

x
如下:
> list1 = [123,456]
>>> list2 = list1
>>> list1 *=2
>>> list2
[123, 456, 123, 456]
>>> list1 = 3
>>> list2 = list1
>>> list1 *= 3
>>> list2
3

为什么列表的变量就是层皮,而整型数值的list2就不会随着list1的变呢,这不矛盾么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-28 18:59:46 | 显示全部楼层
你可以把 int double 等这些理解成 基本数据类型 这些用=是所实际的值给了对方
而 list dict set 这些 是理解为 对象类型 这些用=实际上就是把 实际值的地址 给对方; 也就是说=后 2个变量同时指向的是同一个值。而你这里
list1 = [123,456]
list2 = list1[:]
这样后list1 和 list2 便都有了各自的值了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-28 20:14:50 | 显示全部楼层
理解这个问题,要明白两个点:
A: 在Python中,数据可以分为可变,不可变。  例如str ,int 都是不可变。常见的list,dict,set,都是可变类型
B:在Python中,变量严格的说应该是叫标识符,它只,仅表示在内存中的'某个具体数据'。
a = 1
b = a   这样的应该理解,a指向了内存里面 1 这个数据,然后b也指向1这个数据,a和b关联的地方就是同时指向 1
a = 2  现在  a指向了2 ,但是b还是指向1
-------------------------------------------------------
a = []
a.append(0)     这样的应该理解,a指向了内存里面 [] 这个数据,然后往列表(或者说容器)里面增加数据,增加数据并不会改变a的指向
list2 = list1[:]   注意楼上说的,list的某些操作是会返回一个新的列表,会改变指向,就像a 从1指向2。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-21 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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