在Python中所有的东西都是一个对象。
甚至基本原始类型的值 (整数、字符串、浮点...) 也是对象。列表是对象,图元,字典,都是对象。
对象有属性和方法,可以用点语法来访问。
例如,试着定义一个类型为int 的新变量。
age 现在可以访问为所有 对象定义的属性和方法。int
这包括,例如,访问该数字的实部和虚部。
print(age.real) # 8
print(age.imag) # 0
print(age.bit_length()) #4
# the bit_length() method returns the number of bits necessary to represent this number in binary notation
一个持有列表值的变量可以访问一组不同的方法。
items = [1, 2]
items.append(3)
items.pop()
这些方法取决于值的类型。
Python提供的id() 全局函数可以让你检查一个特定对象在内存中的位置。
id(age) # 140170065725376
你的内存值会发生变化,我只是作为一个例子来展示它
如果你给变量分配一个不同的值,它的地址将会改变,因为变量的内容已经被存储在内存中另一个位置的另一个值所取代。
age = 8
print(id(age)) # 140535918671808
age = 9
print(id(age)) # 140535918671840
但是如果你使用对象的方法来修改它,地址就会保持不变。
items = [1, 2]
print(id(items)) # 140093713593920
items.append(3)
print(items) # [1, 2, 3]
print(id(items)) # 140093713593920
只有当你把一个变量重新赋值给另一个值时,地址才会改变。
有些对象是可变的,有些是不可变的。这取决于对象本身。如果该对象提供了改变其内容的方法,那么它就是可变的。否则它就是不可变的。大多数由Python定义的类型是不可变的。例如,一个int 是不可变的。没有任何方法可以改变它的值。如果你用
age = 8
age = age + 1
#or
age += 1
并用id(age) 检查,你会发现age 指向了不同的内存位置。原来的值没有发生变化,我们换成了另一个值。