欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Python]链式赋值(Chained assignment)

程序员文章站 2022-07-16 15:14:25
...

[Python]链式赋值(Chained assignment)

在C,Java语言中,赋值是从右到左依次执行。
a = s = 3 等价于: a = (s = 3),即s = 3表达式是有返回值的. 它会返回赋值的结果3,然后赋值给a
而在Python环境下写a = (s = 3)会触发SyntaxError: invalid syntax
a = (s = 3)出错的原因是因为Python 的运算符 = 是引用,而非赋值运算,所以 s = 3 的含义是创建一个值为 3 的 int 对象,再将 s 指向该对象的地址。

实例

a = b = c = 1
等价于
a = 1; b = a; c = a
x = [1, 2, 3, 4, 5,]
i = 0
i = x[i] = 3
求i与x的值。
----------------------------
i = 3; x[3] = 3; x = [1, 2, 3, 4, 5,]
a = b = c = [] ③
c = [1,2,3] ①
c.append(3)
b.append(1) ②
----------------
①:a = [], b = [], c = [1,2,3]
②:a = [1], b =[1],c=[1,2,3,3] //说明a和b代表的对象是相同的。
-----------------------------------------------------------------------------------
a = b = c = [],这时候,a,b,c对应的都是同一个内存中的地址。
对c进行赋值操作之后,则是从内存中分配另一个地方,并且让c重新指向这个新的地址

Python object 的 mutable 和 immutable

Python 的世界里,一切皆对象,每个对象各包含一个 idendity、type 和 value。

  • identity: object 的内存地址空间,其值可由 id() 函数获取,一旦object被创建,其 identity 将不可改变。
  • type: object 的类型,其值可由 type() 函数获取,一旦 object 被创建,其 type 也不可该变。
  • value:可理解为 object 的值。
  • mutable objects:无需改变idendity就可以改变其value

Common immutable type:

  • numbers: int(), float(), complex()
  • immutable sequences: str(), tuple(), frozenset(), bytes()

Common mutable type (almost everything else):

  • mutable sequences: list(), bytearray()
  • set type: set()
  • mapping type: dict()
  • classes, class instances
  • etc.
x = something # immutable type          #①
print x
func(x)
print x # prints the same thing

x = something # mutable type             #②
print x
func(x)
print x # might print something different

x = something # immutable type        #③
y = x
print x
# some statement that operates on y
print x # prints the same thing

x = something # mutable type         #④
y = x
print x
# some statement that operates on y
print x # might print something different

总结

x = y = objectx = object,y=x,

  • objectimmutable:x指向object,y在内存中新建一个value与x相同但id不同的object。
  • objectmutabletmp = object, x = tmp,y = tmp,x与y指向同一object,在x,y上的操作互相影响。

Python is同一性运算符和==相等运算符区别

==比较操作符:用来比较两个对象是否相等,value做为判断因素;
is同一性运算符:比较判断两个对象是否相同,id做为判断因素。

相关标签: Python