如何仅获取数组当前值而非引用?Python数组赋值问题咨询
问题解答
一、让原列表x保持不变的简洁方法
你用逐个赋值的方法能达到效果,但Python里有更省事的列表复制方式,不用手动挨个赋值:
方法1:切片语法
x = [1, 2, 3] y = x[:] # 用切片创建整个列表的副本 y.append(4) print(x) # 输出 [1, 2, 3]
方法2:list()构造函数
x = [1, 2, 3] y = list(x) # 基于原列表生成新列表 y.append(4) print(x) # 输出 [1, 2, 3]
方法3:copy()方法(Python3.3及以上可用)
x = [1, 2, 3] y = x.copy() # 调用列表自带的copy方法生成副本 y.append(4) print(x) # 输出 [1, 2, 3]
这些方法都是创建原列表的浅拷贝,对于像整数这种不可变元素组成的列表完全够用,比手动赋值高效多了。
二、获取列表的当前值(而非函数引用)
看你给的代码:
x = [foo(), bar(), someOtherChangingNumber(), datetime.now()]
其实这里的x已经存的是函数执行后的当前值了,因为foo()、bar()这种带括号的写法会直接执行函数,把返回结果放进列表。如果你的实际场景是列表里存的是函数对象(比如x = [foo, bar, ...],不带括号),要拿到它们的当前执行值,直接遍历列表调用每个函数就行:
# 假设x里存的是函数对象 x = [foo, bar, someOtherChangingNumber, datetime.now] y = [func() for func in x] # 遍历调用每个函数,获取当前值 print(y)
要是你想保存x当前的元素快照,防止后续x的元素被修改影响到y,同样用前面说的列表拷贝方法就行,比如y = x.copy()或者y = x[:],这样y就会固定住赋值那一刻x的所有元素值。
内容的提问来源于stack exchange,提问作者blazgocompany
相关产品推荐
相关产品推荐

