写作绅士,读作丧尸 X岛揭示板
顺猴者昌 逆猴者亡 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 官方公众号:【X岛揭示板】 官方微博: 【@X岛极速版】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.63952357 - 无标题 - 技术宅


回应模式
No.63952357
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

无标题 无名氏 2024-10-02(三)11:40:35 ID:4kTyLpO [举报] [订阅] [只看PO] No.63952357 [回应] 管理
发现一个问题( ゚∀。)Python的
>>>a=b=[]
>>>a.append(1)
这个时候a和b两个列表都会添加一个1( ゚∀。)是因为连等定义共用一个内存地址吗
无标题 无名氏 2024-10-02(三)14:02:31 ID:4Sv4ob7 [举报] No.63953502 管理
是的,你可以试一下id(a),id(b),就会发现这两个变量名(标识符)指向的是同一个对象
无标题 无名氏 2024-10-02(三)14:07:26 ID:5IJAv3m [举报] No.63953539 管理
常见的面向对象的值语义语言大概就C++
其他的行为都类似于这样,不指定拷贝绑定的是引用
于是就一起改了
无标题 无名氏 2024-10-02(三)14:15:04 ID:YiXpQ4t [举报] No.63953610 管理
python的list是对象,不是标量。
标量会复制,对象会传引用
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2024-10-02(三)14:16:00 ID:4kTyLpO (PO主) [举报] No.63953619 管理
看来只能这么解决了( ´д`)
无标题 无名氏 2024-10-02(三)14:18:58 ID:YiXpQ4t [举报] No.63953651 管理
为啥不能
a=[]
b=[]
无标题 无名氏 2024-10-02(三)14:20:37 ID:YiXpQ4t [举报] No.63953671 管理
哦想复制list是吧
b=[x for x in a]

或者更进阶一点对于复杂嵌套对象可以看看copy.deepcopy
无标题 无名氏 2024-10-02(三)14:26:14 ID:4kTyLpO (PO主) [举报] No.63953725 管理
>>No.63953671
谢肥哥( ゚∀。)查到深拷贝的方法了,但是测试了一下发现我最需要的是完全洗内存地址,先转字符串再等效貌似最方便,好像还有什么可变对象和不可变对象之类的区别,小白看不懂啦|д` )
无标题 无名氏 2024-10-02(三)14:29:15 ID:4WVuFwF [举报] No.63953756 管理
>>No.63953671
复杂了
a=[]
b=a[:]
无标题 无名氏 2024-10-02(三)14:30:35 ID:4WVuFwF [举报] No.63953768 管理
>>No.63953619
你这种转字符串的方法各种方面都不安全

非要转的话用json库来转
无标题 无名氏 2024-10-02(三)14:31:56 ID:4WVuFwF [举报] No.63953784 管理
>>No.63953756
一行的话可以
b=(a:=[])[:]
收起 查看大图 向左旋转 向右旋转
无标题 无名氏 2024-10-02(三)14:37:11 ID:4kTyLpO (PO主) [举报] No.63953825 管理
>>No.63953768
>>No.63953756
( ゚∀。)b好用诶,但是嵌套的情况下好像只有最外层列表的地址不同,列表内部的列表还是一样的
无标题 无名氏 2024-10-02(三)14:38:49 ID:4kTyLpO (PO主) [举报] No.63953844 管理
>>No.63953784
话说这种表达方式是啥,正则表达式吗( ゚∀。)
无标题 无名氏 2024-10-02(三)14:39:50 ID:4WVuFwF [举报] No.63953853 管理
>>No.63953825
那就用json库,可以安全的序列化以及反序列化包含基础类型的dict和list
无标题 无名氏 2024-10-02(三)14:40:22 ID:YiXpQ4t [举报] No.63953862 管理
>>No.63953725
python没有内存地址这个概念,不建议把这个放在考虑范围内
上面肥哥写的几种方法翻译成c都是你期望的新建vector往里插元素
而eval(str())实际运行是先转字符串,再调解释器,再翻译代码,再执行上述vector操作,就多此一举。而且eval这个函数有大量安全性问题(字符串注入之类的),能不用就不用
无标题 无名氏 2024-10-02(三)14:41:38 ID:4WVuFwF [举报] No.63953873 管理
>>No.63953844
海象运算符,或者叫赋值表达式
怎么和正则表达式联系上的( ゚∀。)
无标题 无名氏 2024-10-02(三)14:42:35 ID:YiXpQ4t [举报] No.63953882 管理
如果确保只有list dict就用deepcopy
如果只是需要二维数组,里面都是同类型元素,用numpy
无标题 无名氏 2024-10-02(三)14:43:11 ID:4kTyLpO (PO主) [举报] No.63953887 管理
>>No.63953873
因为我只见过没用过,只知道很简洁,看到能在括号里塞直接运行的简洁表达式就瞎蒙了( ゚∀。)
无标题 无名氏 2024-10-02(三)14:44:24 ID:4Sv4ob7 [举报] No.63953896 管理
>>No.63953844
b=(a:=[])[:]

里面这个:=叫海象运算符,可以给a赋值的同时作为表达式
这一段相当于
a=[]
b=a[:]
无标题 无名氏 2024-10-02(三)14:44:52 ID:YiXpQ4t [举报] No.63953900 管理
如果是软件开发不建议压代码压的太狠,其他人也看不懂。ctf,算法竞赛无所谓,自己看得懂就行了

UP主: