首页 > 编程语言 >python里面用append把一个数组压到另一个数组里面,原来的数组如果再append东西,后来的数组就跟着变化的问题

python里面用append把一个数组压到另一个数组里面,原来的数组如果再append东西,后来的数组就跟着变化的问题

时间:2022-10-22 10:15:00浏览次数:50  
标签:extend 结果 python append 数组 unit

在python里有一个非常烦人的问题就是给数组填充新值时,假如用append的方法,最终填充进数组的不是实际的值,而是类似于一个指针(比喻一下,和指针的差别还是很大的)如果原数组继续append数据,那么新数组也会跟着变化。就像下面这段程序:

b = []
a = ['aaaaaaa']
b.append(a)
print(b)

运行结果为:

[['aaaaaaa']]

但是如果这时候给a append新的字符串,b也会跟着改变,就像这样:

a.append('bbbbbbb')
print(b)

瞬间结果就变成了这样:

[['aaaaaaa', 'bbbbbbb']]

这是python的惰性求值机制导致的,简言之就是python会在最终需要的时候再求值,表达式不再被绑定到变量的时候立即计算出来,而是在当值被取用的时候才计算。这一方面能提高代码的运行效率,另一方面也会导致在一些特殊情景下产生预料外的运行结果。
在我的程序里遇到这个问题是因为我创建了两个变量,一个unit不断的计算新的数组,一个result不断的保存unit的值,结果每次unit添加了新值后,result的值也就跟着变化了。
我检索了网上关于这个问题的解法,结果都不太理想,直到我看到和append对应的extend函数,才找到一种解决方案。
image
一开始我尝试直接用extend替换append,结果发现还是有问题,extend会把结果直接合并到一起,就像这样:

c = []
a = ['aaaa']
b = ['bbbb']
c.extend(a)
c.extend(b)
print(c)

结果是:

['aaaa', 'bbbb']
#而我期望的结果是[['aaaa'], ['bbbb']]

虽然结果不理想,但是也已经很接近答案了,我尝试用一个中间变量来暂存extend的结果,完成了要实现的功能,程序类似这样:

t.extend(unit)#unit是我每次要操作的单元数组,t是中间变量
result.append(t)#result保存每次unit的结果
t = []

之后我又发现有函数其实可以直接实现对append实值的拷贝:

import copy
copy.deepcopy()

标签:extend,结果,python,append,数组,unit
From: https://www.cnblogs.com/java-six/p/16815423.html

相关文章

  • Python字符串与数组相互转换
    Python中有join()和os.path.join()两个函数,具体作用如下:join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.jo......
  • Golang 和 Python 随机生成N位字符串
    Golang:funcRandomString(nint)string{ varletters=[]byte("ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789") result:=make([]byte,n) /......
  • Python: Facade Pattern
    DuFacade.pyimportosimportreimportthreading#外观模式FacadePatternclass_IgnitionSystem(object):@staticmethoddefproduce_spark():......
  • Python学习三天计划-2
    一、函数函数:是组织好的,可重复使用的,用来实现特定功能的代码段。优点:可供重复利用的代码段提高程序的复用性减少重复性代码提高开发效率1.定义deffunc1():......
  • Python程序员常犯的编码错误(二)
    1.引言本文是Python程序员常犯的编码错误的第二篇,在上一篇中我们重点介绍了常见的五种错误,本文继续介绍该话题,希望大家在日常生活中多多关注。闲话少说,我们直接开始吧!2.......
  • Python: Decorator Pattern
     DuDecorator.py#装饰模式DecoratorPatternimportsix#https://pypi.org/project/six/[email protected]_metaclass(ABCMeta)classAbstra......
  • Selenium+Python系列(三) - 常见浏览器操作
    写在前面上篇文章为大家分享了自动化测试中,常见元素定位的操作。今天再次读文章,居然忘记了大家特别喜欢的CSS和Xpath定位操作分享,这怎么能行呢?马上安利,感兴趣的同学去参......
  • Python RabbitMQ pika的安装及work消息模型的使用
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有......
  • Python pandas 通过时间计算统计每月数据记录数
    在Python中进行数据统计时,有些数据我们可能需要统计每月或指时间范围的数据记录数,本文主要介绍Pythonpandas中通过时间计算统计每月数据记录数的方法,以及相关的示例代码。......
  • 树状数组两种修改+求和 | 模板
    \(O(mlogn)\),单次查询为\(O(logn)\)实际最坏情况下优于线段树,因为跑不满...1.单点修改+区间求和区间求和变为前缀和相减。#include<iostream>#include<cstdio>const......