detail

map python 内置函数

在我使用map函数的时候, 有个值得关注的细节。

data = ['1','2','3','4']
def fx(i):
    print(i)

map(fx,data)

原本我以为会输出‘1’,'2’,‘3’,‘4’的,但结果并没有。

但是当我在map函数前加入list, list(map(fx,data)) ,之后,输出结果。

可变对象和不可变对象 ,python变量类型

不可变对象包括int,float,long,str,tuple等,可变对象包括list,set,dict等。需要注意的是:这里说的不可变指的是值的不可变。对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。另外,不可变的类型可以计算hash值,作为字典的key。可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。
在我使用了 list类型变量时, 我遇到了一个错误,这个错误让我百思不得其解,总共耗费了我大约两天的时间,终于让我在调试出错误在哪儿了。
程序的源码简略版:

s = ['ppppppppppppppp']
a = s
def f():
    for i in range(1,3):
        a.append('a')
    return 0
f()
print(a)
print(id(a))
print('next\n') 
print(s)
print(id(s))

在整个输出我当时不能理解的是为什么s的输出和 a一样。虽说这个简略版的将这个错误突显出来,但是我当时。。。。。。才找出来。
切回正题,其实道理很简单就是,C语言中有一个数据类型数组,对比这便可以理解 list这类可变对象的操作与不可变对象的不同。 a = s 列表s赋值给列表 a的首地址。也就是 为什么a和s的地址输出是一样的原因。

 待更新

猜你喜欢

转载自www.cnblogs.com/newy/p/11288994.html