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()用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中的np.random.seed()随机数种子问题及解决方法

    Python中的np.random.seed()随机数种子问题及解决方法

    随机数种子,相当于我给接下来需要生成的随机数一个初值,按照我给的这个初值,按固定顺序生成随机数,接下来通过本文给大家介绍Python中的np.random.seed()随机数种子问题,需要的朋友可以参考下
    2022-04-04
  • python 遗传算法求函数极值的实现代码

    python 遗传算法求函数极值的实现代码

    今天小编就为大家分享一篇python 遗传算法求函数极值的实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python中dict和set的用法讲解

    Python中dict和set的用法讲解

    今天小编就为大家分享一篇关于Python中dict和set的用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python机器学习算法库scikit-learn学习之决策树实现方法详解

    Python机器学习算法库scikit-learn学习之决策树实现方法详解

    这篇文章主要介绍了Python机器学习算法库scikit-learn学习之决策树实现方法,结合实例形式分析了决策树算法的原理及使用sklearn库实现决策树的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Python中线程同步的实现

    Python中线程同步的实现

    本文主要介绍了Python中线程同步的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • Python3爬虫中关于Ajax分析方法的总结

    Python3爬虫中关于Ajax分析方法的总结

    在本篇文章里小编给大家整理的是一篇关于Python3爬虫中关于Ajax分析方法的总结,需要的朋友们可以学习下。
    2020-07-07
  • python递归调用中的坑:打印有值, 返回却None

    python递归调用中的坑:打印有值, 返回却None

    这篇文章主要介绍了python递归调用中的坑:打印有值, 返回却None,本文通过问题分析给出解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python网络编程之ftplib模块

    Python网络编程之ftplib模块

    这篇文章介绍了Python网络编程之ftplib模块,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python利用google翻译方法实例(翻译字幕文件)

    python利用google翻译方法实例(翻译字幕文件)

    这篇文章主要给大家介绍了关于python利用google翻译(翻译字幕文件)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • NumPy中数组的转置Transpose的三种方法

    NumPy中数组的转置Transpose的三种方法

    本文主要介绍了NumPy中数组转置的基本概念、方法、应用场景及注意事项,针对二维与高维数组,提供了多种转置方法,包括T、transpose、np.transpose,下面就来详细的了解一下
    2026-04-04

最新评论