BBboker 2022-04-19 11:02 采纳率: 100%
浏览 25
已结题

Python 列表链式赋值,改动后为啥其他的也变了

问题遇到的现象和发生背景
来一个形象的比喻,比如有

A, B, C, D四个人,我给A起名为项羽,然后我让B,C,D的名字为A,随后我改了B的名字为刘邦,结果A,C,D三个人也同时改了名字,

问题相关代码,请勿粘贴截图
a = [1, 2, 3, 4, 5, 6]
b = a
b.append('w')
print(a)
运行结果及报错内容

[1, 2, 3, 4, 5, 6, 'w']
运行的结果是a也同步改变了

我的解答思路和尝试过的方法

将a与b以及其他的人直接赋值到列表,但是这样不够简便假如我有一串很长的数据

我想要达到的结果

假如这是一串很多数据的列表,我需要对这串列表做不同的改动分别保存,那么我应该怎样赋值,才能让a,b,c,d各自变化互不影响,
谢谢解答。

  • 写回答

3条回答 默认 最新

  • chuifengde 2022-04-19 11:36
    关注

    首先要分清:什么是可变类型数据,什么是不可变类型数据
    其次要分清:python的变量与具体数据之间的关系是绑定关系,可以看作是贴标签
    你上面就是同一个数据贴了好几个标签,按照某个标签找到了数据,然后又把数据给改了,其它的标签访问的就是这个改了的数据。
    弄懂了原理,只要把原始数据换成一个新的地址,原来的标签就再也找不到现在改动的数据了
    比如:
    b = a[:]
    b = [i for i in a]
    b = a.copy()
    b = list(a)
    这四种都可以

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月19日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: