小编psp*_*cil的帖子

Python:为什么切片以这种方式工作?

在官方Python教程(2.7)中,据说切片生成列表的浅表副本(例如),切片中的每个项目都是对原始列表对象的引用.

例如,做

a = [1,2,3]
a[:][0] = 2
Run Code Online (Sandbox Code Playgroud)

不会改变实际值,因为发生的事情只是切片中的第一个项被引用到一个新对象(即2).

但是,干嘛

a[:] = [] # or any other list
Run Code Online (Sandbox Code Playgroud)

实际上会改变清单.

任何人都可以解释一下吗?

python

7
推荐指数
0
解决办法
137
查看次数

Python函数:可选参数计算一次?

Python教程4.7.1.默认参数值表示以下内容:

重要警告:默认值仅评估一次.当默认值是可变对象(如列表,字典或大多数类的实例)时,这会有所不同.例如,以下函数累积在后续调用中传递给它的参数:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将打印

[1]
[1, 2]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

在内存管理方面,我不太明白"仅评估一次"的含义.显然,函数的默认值在首次调用函数时被计算一次,并且即使在函数结束后也存储在单独的存储器地址中.(根据我的理解,在函数结束后,应该释放所有局部变量?)

我对么?

python

3
推荐指数
1
解决办法
589
查看次数

标签 统计

python ×2