鱼C论坛

 找回密码
 立即注册
查看: 2320|回复: 4

python小问题请教

[复制链接]
发表于 2021-11-18 10:25:04 | 显示全部楼层 |阅读模式

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

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

x
>>> name = 'William'
>>> hero = name
>>> hero
'William'
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> mylist = shoplist
>>> del shoplist[0]
>>> shoplist
['mango', 'carrot', 'banana']
>>> mylist
['mango', 'carrot', 'banana']

请教一个问题,如上所示,变量hero和mylist,为何一个没变另一个却变了呢?
mylist应该保持不变啊

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

使用道具 举报

发表于 2021-11-18 10:41:48 | 显示全部楼层
 shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> mylist = shoplist
,shoplist就相当于一个抽屉,然后又贴了一个mylist的标签,你删减抽屉里的东西,mylist里的当然也就删减了,除非你用mylist = copy .deepcopy(shoplist),记得import copy引用,你可以百度下Python 直接赋值、浅拷贝和深度拷贝解析
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 10:48:53 | 显示全部楼层
多谢回复!还是不太理解
变量名=标签,内存地址=抽屉,变量值=抽屉里的东西,这样理解没错吧?
我还没学到浅拷贝和深度拷贝的概念,就赋值而言,为什么变量赋值为字符串和列表,会有上述区别呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 10:52:53 | 显示全部楼层
>>> name = 'William'
>>> hero = name
>>> hero
'William'
>>> name = 'Hilton'
>>> hero
'William'
按照‘抽屉-标签’逻辑,抽屉‘name’的标签换成了‘hero’,现在抽屉里的内容换成了‘Hilton’,为啥‘hero’里面还是‘William’呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-18 11:12:49 | 显示全部楼层
本帖最后由 白two 于 2021-11-18 11:18 编辑
shxmk 发表于 2021-11-18 10:52
>>> name = 'William'
>>> hero = name
>>> hero

name =  'William'
开辟了一块内存,用来储存 'William' 这个字符串,创建一个变量 name 去指向这个内存

hero = name
创建了一个变量 hero ,指向 name 指向的内存,注意:hero 指向的是 'William' 所在的内存,而不是 name 这个变量
本质上是:
hero =  'William'

name = 'Hilton'
开辟了一块内存,用来储存 'Hilton' 这个字符串,让变量 name 指向这个内存
注意:这个时候变量 hero 还是指向的还是 'William' 所在的内存

你看下面的这个内存变化就懂了:
>>> a = 'a'
>>> b = a
>>> id('a')
2240291661808
>>> id(a)
2240291661808
>>> id(b)
2240291661808
>>> a = 'b'
>>> id('a')
2240291661808
>>> id('b')
2240291356848
>>> id(a)
2240291356848
>>> id(b)
2240291661808
你看 b 的 id 是没有变的,它的 id 还是等于 'a' 的 id
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-30 11:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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