shxmk 发表于 2021-11-18 10:25:04

python小问题请教

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

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

myqf123 发表于 2021-11-18 10:41:48

shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> mylist = shoplist,shoplist就相当于一个抽屉,然后又贴了一个mylist的标签,你删减抽屉里的东西,mylist里的当然也就删减了,除非你用mylist = copy .deepcopy(shoplist),记得import copy引用,你可以百度下Python 直接赋值、浅拷贝和深度拷贝解析

shxmk 发表于 2021-11-18 10:48:53

多谢回复!还是不太理解
变量名=标签,内存地址=抽屉,变量值=抽屉里的东西,这样理解没错吧?
我还没学到浅拷贝和深度拷贝的概念,就赋值而言,为什么变量赋值为字符串和列表,会有上述区别呢?

shxmk 发表于 2021-11-18 10:52:53

>>> name = 'William'
>>> hero = name
>>> hero
'William'
>>> name = 'Hilton'
>>> hero
'William'
按照‘抽屉-标签’逻辑,抽屉‘name’的标签换成了‘hero’,现在抽屉里的内容换成了‘Hilton’,为啥‘hero’里面还是‘William’呢?

白two 发表于 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
页: [1]
查看完整版本: python小问题请教