Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python对象实例是语言中唯一的对象吗?_Python_List_Object_Python 3.x - Fatal编程技术网

Python对象实例是语言中唯一的对象吗?

Python对象实例是语言中唯一的对象吗?,python,list,object,python-3.x,Python,List,Object,Python 3.x,我想知道Python如何处理用户定义的对象。下面是一个场景: 我创建了自己的类MyClass: class MyClass(): def __init__(self): # some code here class MyClassContainer(): def __init__(self): self.container = [] # will store MyClass object instances. def Add(self, object): s

我想知道Python如何处理用户定义的对象。下面是一个场景:

我创建了自己的类MyClass:

class MyClass():
  def __init__(self):
    # some code here

class MyClassContainer():
  def __init__(self):
    self.container = [] # will store MyClass object instances.
  def Add(self, object):
    self.container.append(object)
  def Remove(self, object):
    self.container.remove(object)

example = MyClassContainer()

myclass1 = MyClass()
example.Add(myclass1)

myclass2 = MyClass()
example.Add(myclass2)

example.Remove(myclass1)
那么问题是,python的remove函数是否能够区分同一类的不同对象实例?是否存在无法唯一标识我要删除的对象实例的角落案例

一种可能的情况是:

myclass1 = MyClass(5)
example.Add(myclass1)

myclass1 = MyClass(3)
example.Add(myclass1)

example.Remove(myclass1)
将删除哪个对象实例?我猜是通过了3,但是有没有一条规则说,python唯一地标识同一类的对象实例?

list.remove()
删除第一个测试相等的对象。从:

s.remove(x)

从s中删除第一项,其中
s[i]==x

默认情况下,自定义类的实例只有在它们是完全相同的对象时才测试相等;如果
s[i]为x
返回true,则
s[i]==x
也返回true

定义实例的不是变量名;在第二个示例中,将从列表中删除
MyClass(3)
实例,因为它是一个唯一的对象,不同于之前创建和添加的
MyClass(5)
实例。您可以使用检查,它在CPython上基本上返回当前内存地址:

>>> myclass1 = MyClass(5)
>>> id(myclass1)
4349144816
>>> example.Add(myclass1)
>>> myclass1 = MyClass(3)
>>> id(myclass1)
4349145040
>>> example.Add(myclass1)
>>> example.container
[<__main__.MyClass object at 0x1033aaef0>, <__main__.MyClass object at 0x1033aafd0>]
>>> hex(id(myclass1))
'0x1033aafd0'
>>> myclass1 is example.container[1]
True
>>> example.Remove(myclass1)
>>> example.container
[<__main__.MyClass object at 0x1033aaef0>]
通过该更改,您可以执行以下操作:

example.Add(MyClass(42))
example.Add(MyClass(81))
example.Remove(MyClass(42))

这将删除
number
设置为
42

的实例,您必须使用
\uuuuuueq\uuuu
定义它们的比较方式。基本上定位了
myclass1==example.container
元素并将其删除。如果您使用的是Python 2,那么在定义
\uuuuueq\uuuu
时,您可能希望设置
\uuuhash\uuuuu=None
或定义一个合理的
\uhash\uuu
方法,所以dicts和set不会发疯。
example.Add(MyClass(42))
example.Add(MyClass(81))
example.Remove(MyClass(42))