阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python之列表的append()方法最容易踩的坑及解决

321次阅读
没有评论

共计 1650 个字符,预计需要花费 5 分钟才能阅读完成。

导读 这篇文章主要介绍了 Python 之列表的 append() 方法最容易踩的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Python 列表的 append() 方法踩坑

在这之前,我一直认为 append() 只是个将一个对象添加到列表尾部的方法,但是今天之后,我对它有了一个新的认识。

一般情况下,我们都是这样使用:

list = [1,2,3]
list.append(4)
# list 列表就变成了 [1,2,3,4]

但是在后来的使用中,遇到了像下面这样的问题:

a = [1,2]
b = []
 
b.append(a)
print(b)
 
a.append(3)
print(b)
# 此时 b 的结果为 [[1,2,3]]
# 是的,你没看错,就是 [[1,2,3]]

​明明两次打印之间没有对 b 进行任何操作,那么 b 为什么会发生变化,问题肯定是出在了 append 方法上。

通过一系列的资料查询,发现 append 方法是浅拷贝方法,什么是浅拷贝呢?

官方一点的解释就是:

在 Python 中,对象赋值实际上是对象的引用,当创建一个对象,然后把它赋值给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用,这就是浅拷贝。

什么,你说你还没懂浅拷贝?没关系,下面还有:

a = 1
b = 1
 
print(id(a))
print(id(b))
# 此时你会发现,a 和 b 在内存中的地址居然是一样的 

​因为在 Python 中,先是生成了对象,然后才是变量对对象的引用。比如,1 是一个对象,然后 a 和 b 再分别对 1 进行引用,由于常数是不可变类型,所以 1 的内存空间是一样的,所以 a 和 b 共用一块内存空间。

​形象的来解释就是:

有一个盒子,盒子里面放着 1,然后 a 和 b 对 1 进行引用的时候就是直接把 a 和 b 的标签贴到这个盒子上。

回归正题:

a = [1,2]
b = []
 
b.append(a)
print(b)
 
a.append(3)
print(b)
# 开始时 a 这个盒子等于 [1,2],b 这个盒子等于 []
# 使用 b.append(a) 相当于将盒子 a 放入盒子 b 中
# 所以再使用 a.append(3) 的时候,b 也会跟着一起改变呀!!!
Python 列表的 append 函数
append 的功能

将一个元素添加到当前列表中

append 的用法

用法:list.append(new_item)

参数:new_item:添加进列表的新的元素 (成员)

In [19]: names = ['insane']
In [20]: names.append('loafer')
In [21]: print(names)
['insane', 'loafer']
append 的注意事项
  • 被添加的元素只会被添加到末尾变量
  • append 函数是在原有列表的基础上添加,不需要额外添加新的变量
  • 实战

    每次只能添加一个变量

    # coding:utf-8
     
    books = []
    print(id(books))
    books.append('python')
    print(books)
    print(id(books))
     
    number = 1.1
    tuple_test = (1,)
    dict_test = {'name': 'insane'}
     
    books.append(number)  # 每次只能加入一个变量
    books.append(tuple_test)
    books.append(dict_test)
    print(books)
     
    books.append('django')
    books.append(1)
    print(books)
    print(id(books))
    2029563540224
    ['python']
    2029563540224
    ['python', 1.1, (1,), {'name': 'insane'}]
    ['python', 1.1, (1,), {'name': 'insane'}, 'django', 1]
    2029563540224
    
    Process finished with exit code 0

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1650字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7803702
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

    开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

    开源神器组合!1Panel 面板 +Halo 助你轻松打造个人 / 企业内容中心 前言 大家好,我是星哥,之前...
    还在找免费服务器?无广告免费主机,新手也能轻松上手!

    还在找免费服务器?无广告免费主机,新手也能轻松上手!

    还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
    星哥带你玩飞牛NAS-1:安装飞牛NAS

    星哥带你玩飞牛NAS-1:安装飞牛NAS

    星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

    星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

      4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
    零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

    零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

    零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
    星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

    星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

    星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
    三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

    三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

      三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...