|
发表于 2024-1-6 17:13:37
|
显示全部楼层
这种现象跟元组和引用有关。
详细分析一下:
print(a, add(a), a.sort(), a, add(a)) 相当于传递了一个元组,print 执行中会有一个对元组的解包过程。
- >>> a = [1, 10, 2, 4]
- >>> b = (a,add(a),a.sort(),a,add(a))
- >>> b[0]
- [1, 2, 4, 10]
复制代码
既然是一个元组,且里面有对列表a的引用,就会出现引用问题。元组将第一个元素标记为 a 的内存地址,需要使用时再将地址中的值找出来。而在用(解包、输出)之前,a.sort() 对那一个地址里的元素进行了修改。
- >>> a = [1, 10, 2, 4]
- >>> def add(a):
- return [2 * i for i in a]
- >>> print(a[:],add(a),a.sort(),a[:],add(a))
- [1, 10, 2, 4] [2, 20, 4, 8] None [1, 2, 4, 10] [2, 4, 8, 20]
复制代码
若解决掉引用问题,此时顺序将恢复正常 |
|