[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 = object
即x = object,y=x
,
-
object
为immutable
:x指向object,y在内存中新建一个value与x相同但id不同的object。 -
object
为mutable
:tmp = object, x = tmp,y = tmp
,x与y指向同一object,在x,y上的操作互相影响。
Python is同一性运算符和==相等运算符区别
==比较操作符:用来比较两个对象是否相等,value做为判断因素;
is同一性运算符:比较判断两个对象是否相同,id做为判断因素。