Если вы не уверены, что делаете, используйте '=='. Если у вас есть немного больше знаний об этом, вы можете использовать «is» для известных объектов, таких как «None».
В противном случае вы будете удивлены, почему все не работает и почему это происходит:
>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False
Я даже не уверен, что некоторые вещи гарантированно останутся неизменными между различными версиями / реализациями python.
Большой - то, что языки не на 100% синтаксически совместимы. C++ является полностью ссылкой, совместимой с C, но некоторый синтаксис стиля C++ генерирует ошибку компилятора в C. Некоторые компиляторы не придирчивы и не следуют стандарту C к букве. Основы их должны быть изучены при перемещении от одного языка до другого. Обратите внимание, что я не прочитал последний стандарт C, но в последний раз я знал, что это было верно.
Очень хороший ресурс я не могу устать для продвижения - C++ Часто Подвергаемые сомнению Ответы
C++ или C/C++? Я сказал бы и для самых недооцененных частей, управление памятью и указатели. Первый, потому что люди не освобождают соответственно (слишком рано или нисколько!) и последний, потому что много людей просто не "получает" указатели (или в передаче ссылочным "обликом" или в целом в чем-то как связанный список).
I know this is old question but I thought object slicing / failure of polymorphism with objects on the stack worth mentioning. If I do not use C++ for six months, this one always comes out and bites me when I use the language again.
#include <iostream>
class base {
public:
base(int val) { var1 = val; };
virtual void doSomething() { var1 *= 2; };
int getVar1() { return var1; };
virtual ~base() { };
protected:
int var1;
};
class deriv : public base {
public:
deriv(int val) : base(val) { };
void doSomething() { var1 *= 4; };
};
void use_object_ptr(base *arg) {
arg->doSomething();
std::cout << arg->getVar1() << std::endl;
};
void use_object_copy(base arg) {
arg.doSomething();
std::cout << arg.getVar1() << std::endl;
};
int main(int argc, char **argv) {
deriv d(42);
deriv *p2d = new deriv(42);
use_object_ptr(p2d); // calls deriv::doSomething(), prints 168
use_object_copy(d); // calls base::doSomething(), prints 84
use_object_ptr(&d); // calls deriv::doSomething(), prints 168
return 0;
}