学校网站模板图片,东莞外贸人才网,手机登录百度pc端入口,互联网站的建设维护营销在 Python 中一切都可以看作为对象。每个对象都有各自的 id, type 和 value。id: 当一个对象被创建后#xff0c;它的 id 就不会在改变#xff0c;这里的 id 其实就是对象在内存中的地址#xff0c;可以使用 id() 去查看对象在内存中地址。type: 和 id 一样当对象呗创建之后…在 Python 中一切都可以看作为对象。每个对象都有各自的 id, type 和 value。id: 当一个对象被创建后它的 id 就不会在改变这里的 id 其实就是对象在内存中的地址可以使用 id() 去查看对象在内存中地址。type: 和 id 一样当对象呗创建之后它的 type 也不能再被改变type 决定了该对象所能够支持的操作value: 对象的值一个对象可变与否就在于 value 值是否支持改变。不可变对象常见的不可变对象(immutable objects):Number: int, float, complexstringtuplefrozenset:set 的另外一种类型让我们通过例子感受一下例子 x1 yx id(x)id(y)True id(1)id(y)True这里创建了两个 int 对象并且让 x,y 指向同一个对象然后我们试着修改一下 x,让 x1xx1这个时候 x 的 id 值和 y 的 id 以及 1 的 id 还一样吗 xx1 id(x)id(y)False id(x)id(1)False id(1)id(y)True从结果不难看出来x 所指向的对象已经改变了但是 1 并没有改变。这就是不可变对象对于不可变对象来说一旦创建之后就不允许被改变。注意: 不可变并不严格等同绝对的不可变 a([1],2,3) id(a)4338862696 id(a[0])4338949128 a[0][0]0 id(a)4338862696 id(a[0])4338949128从上面的例子不难看出我们改变了 a[0] 的值但是并没有影响它的 id 值。一个不可变容器对象如果包含对可变对象的引用当后者的值改变时前者的值也会改变但是该容器仍属于不可变对象因为它的 id 值不会改变的。可变对象常见的可变对象(mutable objects):listdictset同样的通过例子感受一下例子 c [1,2,3] b c id(b)id(c)True创建两个 list 对象并且让 c,d 指向同一个对象然后我们试着修改一下 cc[0]4这个时候在看一下两个对象的 id 值是否一致 id(c)id(b)True修改之后c,d 仍然指向同一个对象所以不难得出结论,对于一个可变对象来说修改 value 值并不会对它的 id 造成任何影响函数参数对于可变对象和不可变对象他们两者在函数当作参数传递的时候表现也有所不同例子eg0def update_list(nums_list):print(f2 id:{id(nums_list)})nums_list [10]print(f3 id:{id(nums_list)})number_list [5, 6]print(f1:{number_list}, id:{id(number_list)})update_list(number_list)print(f4:{number_list}, id:{id(number_list)})看一下结果1:[5, 6], id:44577079122 id:44577079123 id:44577079124:[5, 6, 10], id:4457707912在看另外一个例子eg1def add_num(number):print(f2:{id(number)})number 1print(f3:{id(number)})num 1print(f1:{num}, id:{id(num)})add_num(num)print(f4:{num}, id:{id(num)})看一下结果1:1, id:43437684162 id:43437684163 id:43437684484:1, id:4343768416有其他有些文章中上面 eg0 被称为引用传递eg1 被称为值传递。然而在官方文档中并没有找到有关的这两个名词的任何内容或者这种方式并不是上述的两者任意一种。这里的重点是对于可变对象在函数中的值的改变会导致对象改变对于不可变对象在函数中值的改变对其不会造成任何影响参考