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

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

95次阅读
没有评论

共计 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、短信等云产品特惠热卖中