Yes, they can be ignored by running the interpreter with a certain flag.

I advocated against using them to check argument values provided by the user because they raise the wrong exception (a wrong value should raise a ValueError, a wrong type a TypeError...) and they get fully stripped away if python is ever started with the optimization flags effectively removing all input checking.

Asserts should be used for things that are not supposed to fail: "Your users should never see an AssertionError; if they do, it's a bug to be fixed" and I think this is the case here.