鱼C论坛

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

[已解决]关于变量的问题

[复制链接]
发表于 2020-12-23 19:42:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 国米萨队 于 2020-12-23 19:43 编辑
>>> s = [1,2,3,4,5]
>>> s1 =s
>>> s.append("上山打老虎")
>>> s
[1, 2, 3, 4, 5, '上山打老虎']
>>> s1
[1, 2, 3, 4, 5, '上山打老虎']
>>> s = [1,2,3,4,5]
>>> s1 = s
>>> s1.append("上山打老虎")
>>> s
[1, 2, 3, 4, 5, '上山打老虎']
>>> s1
[1, 2, 3, 4, 5, '上山打老虎']
>>> 

为什么明明只操作s 或者s1 对应的s1 或者s都跟着变化
最佳答案
2020-12-23 20:32:33
第一行给s一个列表,py会在内存中创建这个列表并给他一个s的标签,创建的列表就相当于一个仓库的货物,而s就是贴在货物上的标签
第二行s1=s,这里没有创建新的列表,只是给刚才创建的列表多加了个标签,也就是你在同一个货物上贴了两张不同的标签
第三行给s添加元素,因为s和s1本质上对应的是同一个列表,所以s改变s1也改变了

这部分你可以看深浅拷贝,希望上面我的描述能让你看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-23 20:26:25 From FishC Mobile | 显示全部楼层
映像关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 20:32:33 | 显示全部楼层    本楼为最佳答案   
第一行给s一个列表,py会在内存中创建这个列表并给他一个s的标签,创建的列表就相当于一个仓库的货物,而s就是贴在货物上的标签
第二行s1=s,这里没有创建新的列表,只是给刚才创建的列表多加了个标签,也就是你在同一个货物上贴了两张不同的标签
第三行给s添加元素,因为s和s1本质上对应的是同一个列表,所以s改变s1也改变了

这部分你可以看深浅拷贝,希望上面我的描述能让你看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-23 22:10:15 | 显示全部楼层
s = [1,2,3,4,5]
s1 =s.copy()
s.append("上山打老虎")

print(s)
print(s1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 13:06:24 | 显示全部楼层
>>> s = [1,2,3,4,5]
>>> s1 =s
>>> print(id(s))
2155339526600
>>> print(id(s1))
2155339526600
你看嘛,这个代码是可以查看变量的内存地址的,这是一个地址,所以这里的赋值“s1=s”其实就是一个人的两个名字而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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