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

目录
  • Python列表的append()方法踩坑
  • Python列表的append函数
    • append的功能
    • append的用法
    • 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python 解决空列表.append() 输出为None的问题

    想要实现的功能 空列表中添加数 原代码: FitnessBest = [] FitnessBest = FitnessBest.append(fitnessVal[0, 0]) print(FitnessBest) 输出: None 解决办法 分析: 一定要注意!append方法只是在恰当的位置修改原来的列表!!! 这意味着,他不是返回一个列表,而只是修改原来的列表,所以如果用 等式 输出的话,返回是None ,也就意味着不会又返回值!! 也就是说,去掉返回值即可得到新的列表! 修改后代码: F

  • python中列表添加元素的几种方式(+、append()、extend())

    目录 1.使用+加号 2.使用append()方法 3.使用extend()方法 4.难点 1.使用+加号 +加号是将两个list列表相加,返回一个新的列表对象,会消耗额外的内存. #!/usr/bin/env python # -*- coding:utf-8 -*- if __name__ == '__main__': a = [1, 2, 3] b = [4, 5, 6] c = a + b print(c) 输出: [1, 2, 3, 4, 5, 6]Process finished w

  • Python list append方法之给列表追加元素

    目录 Python list append方法给列表追加元素 描述 语法 举例 注意事项 给列表list中元素添加的四种方式 1. append() 2. extend() 3. insert(index,value) 4.“+”号 Python list append方法给列表追加元素 描述 append函数可以在列表的末尾添加新的对象.函数无返回值,但是会修改列表. 语法 list.append(object) 名称 说明 备注 list 待添加元素的列表   object 将要给列表中添加

  • python添加列表元素append(),extend()及 insert()

    目录 一.使用+号添加列表元素 二.使用append()方法添加列表元素 1.添加单个元素 2.添加对象 3.添加另一个列表 三.extend()方法添加元素 四.insert()方法添加元素 一.使用+号添加列表元素 一般情况下两个列表合并起来也是一种添加元素的方法,只要使用+号直接进行运算就可以了,下面是演示代码. name1 = ['python', 'java', 'php', 'MySql']   name2 = ['C++', 'C', 'C#']   total = name1 +

  • Python列表append()函数使用方法详解

    目录 1. 基本使用 2. 任意类型元素 3. 列表同步 3.1 原理剖析 3.2 解决方案 4. append()与extend()的区别 总结 1. 基本使用 append() 函数可以向列表末尾添加元素 语法 list.append( element ) 参数 element:任何类型的元素 实例:向列表末尾添加一个元素 name_list = ['zhangsan', 'lisi', 'wangwu'] name_list.append('zhaoliu') print(name_lis

  • Python之列表的append()方法最容易踩的坑

    目录 Python列表的append()方法踩坑 Python列表的append函数 append的功能 append的用法 append的注意事项 实战 Python列表的append()方法踩坑 在这之前,我一直认为append()只是个将一个对象添加到列表尾部的方法,但是今天之后,我对它有了一个新的认识. 一般情况下,我们都是这样使用: list = [1,2,3] list.append(4) # list列表就变成了[1,2,3,4] 但是在后来的使用中,遇到了像下面这样的问题: a

  • python添加列表元素append(),extend()及 insert()

    目录 一.使用+号添加列表元素 二.使用append()方法添加列表元素 1.添加单个元素 2.添加对象 3.添加另一个列表 三.extend()方法添加元素 四.insert()方法添加元素 一.使用+号添加列表元素 一般情况下两个列表合并起来也是一种添加元素的方法,只要使用+号直接进行运算就可以了,下面是演示代码. name1 = ['python', 'java', 'php', 'MySql']   name2 = ['C++', 'C', 'C#']   total = name1 +

  • python求列表交集的方法汇总

    本文实例汇总了python求列表交集的方法.分享给大家供大家参考.具体方法如下: 交集对于给定的两个集合A 和 集合B 的交集是指含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合叫交集了,下面给出几个python求列表交集例子供大家参考. 方法1 遍历b1,如果某个元素同时也存在于b2中,则返回 复制代码 代码如下: b1=[1,2,3] b2=[2,3,4] b3 = [val for val in b1 if val in b2] print b3 运行结果如下 复制代码 代码如

  • python中列表元素连接方法join用法实例

    本文实例讲述了python中列表元素连接方法join用法.分享给大家供大家参考.具体分析如下: 创建列表: >>> music = ["Abba","Rolling Stones","Black Sabbath","Metallica"] >>> print music 输出: ['Abba', 'Rolling Stones', 'Black Sabbath', 'Metallica']

  • Python对列表排序的方法实例分析

    本文实例讲述了Python对列表排序的方法.分享给大家供大家参考.具体分析如下: 1.sort()函数 sort()函数使用固定的排序算法对列表排序.sort()函数对列表排序时改变了原来的列表,从而让其中的元素能按一定的顺序排列,而不是简单的返回一个已排序的列表副本. 注意sort()函数改变原来的列表,函数返回值是空值即None.因此,如果需要一个已排好序的列表副本,同时又要保留原有列表不变的时候,就不能直接简单的使用sort()函数.为了实现上述功能使用sort()的方法是:先获取列表X的

  • python实现列表的排序方法分享

    这次代码主要是实现列表的排序,使用sort函数实现,sort函数是对列表中的元素按照特定顺序进行排序,默认reverse,为false,从小到大排序, 如果指定reverse=True,从大到小. 语法格式:l.sort(),希望对你们有所帮助 第一步:先打开我们的pycharm软件,然后新建一个python文件."file","new","python file" 第二步:新建好我们的python文件之后,在我们的编辑页面输入以下代码: l=[

  • python中列表对象pop()方法的使用说明

    目录 列表对象pop()方法的使用 python中pop什么意思 举个例子 列表对象pop()方法的使用 pop() 方法用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法: verse.pop(index) //默认为 index=-1,删除最后一个列表verse的值. print("默认为 index=-1,删除最后一个列表值:",sentence.pop(-1),"\n") print("默认删除最后一个列表值: ",

  • Python的列表和元组详情

    目录 一.Python 列表(list) 1.序列介绍 2.列表的概述 3.创建列表 4.列表的索引 5.列表的分片 6.列表的分片赋值 7.循环遍历列表 8.查找元素与计数 9.列表增加元素 10.列表删除元素 11.列表排序 二. Python 元组(tuple) 1.为什么要将元组设计成为不可变序列 2.创建元组 3.元组的遍历 4.元组的内置函数 一.Python 列表(list) 1.序列介绍 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,

随机推荐