Python中内置函数append()、extend()的用法及区别详解

 更新时间:2025年03月13日 10:01:50   作者:万里春风  
这篇文章主要介绍了Python中内置函数append()、extend()的用法及区别,还探讨了append()函数添加列表时发生的同步变化问题,并提供了解决方案,需要的朋友可以参考下

1.append()函数的基本用法

append()函数可以在列表末尾添加任意类型的元素

1.1 添加整数、浮点数、字符串

实例:

list1 = [1, 2]
list1.append(0) #添加整数类型
print('list1=', list1)

list2 = [1, 2]
list2.append(1.23) #添加浮点数类型
print('list2=', list2)

list3 = [1, 2]
list3.append('everything') #添加字符串类型
print('list3=', list3)

输出:

list1= [1, 2, 0]
list2= [1, 2, 1.23]
list3= [1, 2, 'everything']

1.2 添加列表、字典

实例:

list1 = [1, 2]
a = [1, 2, 3] #列表
list1.append(a)
print('list1=', list1)

list2 = [1, 2]
b = {'小明': 1, '小虎': 2} #字典
list2.append(b)
print('list2=', list2)

输出:

list1= [1, 2, [1, 2, 3]]
list2= [1, 2, {'小明': 1, '小虎': 2}]

2.添加列表发生的同步变化问题

2.1列表、字典同步变化

实例:列表变化

name_list = ['sam', 'dean']
number_list = [1, 2, 3]
name_list.append(number_list)
print(number_list)
print(name_list)

a = 4
number_list.append(a)
print(number_list)
print(name_list)

输出:

[1, 2, 3]
['sam', 'dean', [1, 2, 3]]
[1, 2, 3, 4]
['sam', 'dean', [1, 2, 3, 4]] #结果中的number_list同步变化

2.2 运行原理

为什么已经被添加的列表或字典发生变化时,结果中的列表或字典也同步变化,这是由于append()函数的工作原理是直接调用元素的地址。

实例1:列表变化

name_list = ['sam', 'dean']
number_list = [1, 2, 3]
name_list.append(number_list)

print(id(number_list)) #number_list的引用地址
print(id(name_list[2]))  #添加后的引用地址

输出:

2926810333248
2926810333248

实例2:字典变化

name_list = ['sam', 'dean']
number_list = {'a': 1, 'b': 2, }
name_list.append(number_list)
print(name_list)

print(id(name_list[2]))
print(id(number_list))

number_list['a'] = 3
print(number_list)
print(name_list)

输出:

['sam', 'dean', {'a': 1, 'b': 2}]
1986756347904
1986756347904
{'a': 3, 'b': 2}
['sam', 'dean', {'a': 3, 'b': 2}]

可以看出,添加后number_list的引用地址和原来相同,意味着如果原本number_list中值发生变化,则name_list中添加的number_list值同步变化,这在后续工作中可能出现问题。

2.3 解决方案

我们可以将append()函数引用地址的功能改成引用内容,这需要用到copy()函数。

这里要提到拷贝的两种概念:

1.浅拷贝:拷贝对象的引用地址

2.深拷贝:拷贝对象的内容

而copy()函数中的copy.deepcopy()可以直接拷贝列表的内容,这样就可以保证添加的列表值不发生改变。

实例1:列表

import copy
name_list = ['sam', 'dean']
number_list = [1, 2, 3]
name_list.append(copy.deepcopy(number_list)) #直接拷贝number_list的内容
print(number_list)
print(name_list)

print(id(number_list))
print(id(name_list[2])) #查看此时被添加到name_list中number_list的地址

a = 4
number_list.append(a)
print(number_list)
print(name_list)

输出:

[1, 2, 3]
['sam', 'dean', [1, 2, 3]]
2182206779456
2182206779392
[1, 2, 3, 4]
['sam', 'dean', [1, 2, 3]]

实例2:字典

import copy
name_list = ['sam', 'dean']
number_list = {'a': 1, 'b': 2, }
name_list.append(copy.deepcopy(number_list))
print(name_list)

print(id(name_list[2]))
print(id(number_list))

number_list['a'] = 3
print(number_list)
print(name_list)

输出:

['sam', 'dean', {'a': 1, 'b': 2}]
2607266300864
2607266269184
{'a': 3, 'b': 2}
['sam', 'dean', {'a': 1, 'b': 2}]

可以看到,经过深度拷贝后的列表字典的地址已经改变改变且列表值不随原列表同步变化。

3. extend()函数的基本用法

extend()函数也是添加元素,但与append()函数的区别在于,当添加列表或字典时,extend()函数直接添加列表或字典中的元素,而append()函数则是将列表或字典当作一个元素直接添加。

实例:

list1 = [1, 2]
a = [1, 2, 3]
list1.extend(a)
print(list1)

list2 = ['sam', 'dean']
b = {'dd': 1, 'mm': 2}
list2.extend(b)
print(list2)

输出:

​[1, 2, 1, 2, 3]
['sam', 'dean', 'dd', 'mm'] #字典中的元素值不显示

需要注意,利用attend()添加字典中元素时,元素的值不显示。

总结

到此这篇关于Python中内置函数append()、extend()的用法及区别的文章就介绍到这了,更多相关Python内置函数append()、extend()用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Pytest测试用例的执行方法

    详解Pytest测试用例的执行方法

    大家应该都知道pytest是一个非常成熟的全功能的Python测试框架,接下来通过本文给大家分享Pytest测试用例的执行方法,感兴趣的朋友一起看看吧
    2021-05-05
  • Python定时发送消息的脚本:每天跟你女朋友说晚安

    Python定时发送消息的脚本:每天跟你女朋友说晚安

    今天小编就为大家分享一篇关于Python定时发送消息的脚本:每天跟你女朋友说晚安的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Python实现圣诞树的多种方法

    Python实现圣诞树的多种方法

    这篇文章主要为大家介绍了Python实现圣诞树的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python利用shutil模块实现文件夹的复制删除与裁剪

    Python利用shutil模块实现文件夹的复制删除与裁剪

    shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。本文将利用shutil模块实现文件夹的复制删除与裁剪,需要的可以参考一下
    2022-05-05
  • TensorFlow实现打印每一层的输出

    TensorFlow实现打印每一层的输出

    今天小编就为大家分享一篇TensorFlow实现打印每一层的输出,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 跟老齐学Python之编写类之二方法

    跟老齐学Python之编写类之二方法

    上一讲中创建了类,并且重点讲述了构造函数以及类实例,特别是对那个self,描述了不少。在讲述构造函数的时候特别提到,init()是一个函数,只不过在类中有一点特殊的作用罢了,每个类,首先要运行它,它规定了类的基本结构。
    2014-10-10
  • 利用Python-iGraph如何绘制贴吧/微博的好友关系图详解

    利用Python-iGraph如何绘制贴吧/微博的好友关系图详解

    这篇文章主要给大家介绍了关于利用Python-iGraph如何绘制贴吧/微博好友关系图的相关资料,文中显示介绍了在windows系统下安装python-igraph的步骤,然后通过示例代码演示了绘制好友关系图的方法,需要的朋友可以参考下。
    2017-11-11
  • python操作日志的封装方法(两种方法)

    python操作日志的封装方法(两种方法)

    这篇文章主要介绍了python操作日志的封装方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Python 键盘事件详解

    Python 键盘事件详解

    这篇文章主要为大家详细介绍了Python的 键盘事件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Django CSRF验证失败请求被中断的问题

    Django CSRF验证失败请求被中断的问题

    这篇文章主要介绍了Django CSRF验证失败请求被中断的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论